打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
SpringCloud GateWay 使用 网关路由

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自定义全局过滤器

//fhadmin.cn

@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地址

    }

    @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等完成负载代理即可。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
微服务网关实战
SpringCloud gateway (史上最全)
Spring Cloud Gateway一次请求调用源码解析
Spring Cloud Gateway夺命连环10问?
网络技术常用英文缩写
关于使用GATEWAY后静态资源失效问题
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服