当前位置:主页 > 查看内容

SpringCloud GateWay 使用 网关路由

发布时间:2021-07-21 00:00| 位朋友查看

简介:GateWay之路由转发和过滤 在一个Gateway项目(配置了eureka等组件)中进行配置 server: port: 9006spring: application: name: zhao-service-gateway cloud: gateway: routes: - id: service-autodeliver-router #uri: http://127.0.0.1:8091 uri: lb://zhao-s……
GateWay之路由转发和过滤

在一个Gateway项目(配置了eureka等组件)中进行配置

server:
 port: 9006
spring:
 application:
 name: zhao-service-gateway
 cloud:
 gateway:
 routes:
 - id: service-autodeliver-router
 #uri: http://127.0.0.1:8091
 uri: lb://zhao-service-autodeliver
 predicates:
 - Path /autodeliver/**
 - id: service-resume-router
 #uri: http://127.0.0.1:8081
 uri: lb://zhao-service-resume
 predicates:
 - Path /resume/**
 filters:
 - StripPrefix 1

通过第一个服务hao-service-autodeliver的配置形式 使用固定ip和服务名均可正常通过网关项目访问到服务 但是固定ip的方式不太灵活 而 lb://zhao-service-autodeliver可以实现随机的负载均衡 且不用填写固定ip也避免了不要的麻烦

第二个服务配置中 filters:- StripPrefix 1这个配置会过滤掉第一个路径配置 所以我们在最后访问的时候 除了需要加上第一个过滤掉的配置 还需要加上原本的配置。访问形式如下

GateWay断言

上述针对路径的配置即是断言predicates的配置 而Gateway还内置了以下几种断言

基本上上述断言都是基于请求携带的信息进行过滤的,在实际操作过程中可以综合使用这些信息来达到我们想要的操作

GateWay自定义全局过滤器
 Component
 Slf4j
public class BlackListFilter implements GlobalFilter, Ordered{
 private static final List String blackList new ArrayList ();
 static {
 blackList.add( 0:0:0:0:0:0:0:1 //模拟本机ip地址 fhadmin.cn
 Override
 public Mono Void filter(ServerWebExchange exchange, GatewayFilterChain chain) {
 ServerHttpRequest request exchange.getRequest();
 ServerHttpResponse response exchange.getResponse();
 String clientIp request.getRemoteAddress().getHostString();
 if (blackList.contains(clientIp)){
 response.setStatusCode(HttpStatus.UNAUTHORIZED);
 log.error(clientIp 在黑名单中 拒绝访问 
 String data request be denied 
 DataBuffer wrap response.bufferFactory().wrap(data.getBytes());
 return response.writeWith(Mono.just(wrap));
 return chain.filter(exchange);
 Override
 public int getOrder() {
 return 0;
}

通过该过滤器拦截了黑名单中的请求(该操作在实际中可借助mysql或redis等数据存储实现),实现效果

GateWay的高可用

?关作为?常核?的?个部件 如果挂掉 那么所有请求都可能?法路由处理 因此我们需要做GateWay的?可?。GateWay的?可?很简单 可以启动多个GateWay实例来实现?可? 在GateWay的上游使?Nginx等负载均衡设备进?负载转发以达到?可?的?的。启动多个GateWay实例 假如说两个 ?个端?9002 ?个端?9003 剩下的就是使?Nginx等完成负载代理即可。


本文转自网络,原文链接:https://developer.aliyun.com/article/785545
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文


随机推荐