zoukankan      html  css  js  c++  java
  • springcloud组件gateway断言(Predicate)

    Spring Cloud GatewaySpringCloud的全新子项目,该项目基于Spring5.xSpringBoot2.x技术版本进行编写,意在提供简单方便、可扩展的统一API路由管理方式。

    概念解释:

      • Route(路由):路由是网关的基本单元,由ID、URI、一组Predicate、一组Filter组成,根据Predicate进行匹配转发。
      • Predicate(谓语、断言):路由转发的判断条件,目前SpringCloud Gateway支持多种方式,常见如:PathQueryMethodHeader等。
      • Filter(过滤器):过滤器是路由转发请求时所经过的过滤逻辑,可用于修改请求、响应内容。

    开始使用

    Spring Cloud Gateway目前有两种方式进行配置:

    • application.yml配置文件方式
    • 通过@Bean注解 RouteLocator 方法返回值

     

    route的组成部分

    • id:路由的ID
    • uri:匹配路由的转发地址
    • predicates:配置该路由的断言,通过PredicateDefinition类进行接收配置。
    • order:路由的优先级,数字越小,优先级越高。

    Spring Cloud Gateway Predicates

    每一个Predicate的使用,你可以理解为:当满足这种条件后才会被转发,如果是多个,那就是都满足的情况下被转发。


    Path 方式匹配转发

    我们在application.yml配置文件内添加对应的路由配置,如下所示

    spring:
      application:
        name: spring-cloud-gateway-sample
      cloud:
        gateway:
          routes:
            - id: blog
              uri: http://blog.yuqiyu.com
              predicates:
                # 匹配路径转发
                - Path=/api-boot-datasource-switch.html
    # 端口号
    server:
      port: 9090

    在上面的配置中,当访问http://localhost:9090/api-boot-datasource-switch.html时就会被自动转发到http://blog.yuqiyu.com/api-boot-datasource-switch.html,这里要注意完全匹配Path的值时才会进行路由转发

    ,对应的 RouteLocator方式该怎么进行配置

    @Bean
    public RouteLocator routeLocator(RouteLocatorBuilder builder) {
      return builder.routes()
        .route("blog", r -> 
               r.path("/api-boot-datasource-switch.html").uri("http://blog.yuqiyu.com"))
        .build();
    }
    
    id:blog
    path:/api-boot-datasource-switch.html
    uri:http://blog.yuqiyu.com

    Host 方式匹配转发

    Spring Cloud Gateway可以根据Host主机名进行匹配转发,如果我们的接口只允许**.yuqiyu.com域名进行访问,那么配置如下所示:

    spring:
      cloud:
        gateway:
          routes:
            - id: blog
              uri: http://blog.yuqiyu.com
              predicates:
                - Host=**.yuqiyu.com

    对应的 RouteLocator方式该进行配置

     @Bean
        public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
            return  builder.routes()
                    .route(r -> r.host("**.yuqiyu.com")
                                .uri("http://blog.yuqiyu.com")
                                .order(1)
                                .id("blog")
                    )
                    .build();
        }

    组合示例

    相同的Predicate也可以配置多个,请求的转发是必须满足所有的Predicate后才可以进行路由转发,组合使用示例如下所示:

    spring:
      cloud:
        gateway:
          routes:
            - id: blog
              uri: http://blog.yuqiyu.com
              predicates:
                - Method=GET
                - Host=**.yuqiyu.com
                - Path=192.168.1.56/24    

    对应的 RouteLocator方式该进行配置

    @Bean
        public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
            return  builder.routes()
                    .route(r -> r.host("**.yuqiyu.com")
                                .and().path("/api-boot-datasource-switch.html")
                                .and().method("GET")
                                .uri("http://blog.yuqiyu.com")
                                .order(1)
                                .id("blog")
                    )
                    .build();
        }
  • 相关阅读:
    Application的使用(使用,及要注意的内存泄露问题)
    ANDROID 2.3 HOTPLUG input设备event处理以及hotplug检测
    博客园随笔添加自己的版权信息
    还贷的那些事III——等额还贷的计算
    计算机中的颜色IX——总述:RGB和HSV快速转换
    还贷的那些事II——等本还贷的计算
    计算机中的颜色VII——快速计算纯色的偏转
    还贷的那些事I——还贷的基本概念
    计算机中的颜色VIII——快速计算颜色的偏转
    计算字符串的相似度(VB2005)
  • 原文地址:https://www.cnblogs.com/snail90/p/11719573.html
Copyright © 2011-2022 走看看