• SpringCloud Gateway--Predicate/断言(详细介绍)下


    😀前言
    本篇博文是关于SpringCloud Gateway–Predicate/断言(详细介绍)下,希望你能够喜欢

    🏠个人主页晨犀主页
    🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,您的满意是我的动力😉😉

    💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,感谢大家的观看🥰
    如果文章有什么需要改进的地方还请大佬不吝赐教 先在此感谢啦😊

    SpringCloud Gateway

    Method Route Predicate

    需求分析/图解

    1. 需求: 请求是Get 方式才匹配/断言成功

    代码实现

    1. 参考文档:
      https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.1.RELEASE/reference/html/#gateway-request-predicates-factories

    image-20230828173131936

    解读: 请求方式可以有多个, 使用逗号间隔

    1. 修改e-commerce-gateway-20000 的application.yml
          routes: #配置路由,可以配置多个路由 List routes
            - id: member_route01 #路由的id, 程序员自己配置,要求唯一
              #gateway 最终访问的url 是 url=uri+Path
              #匹配后提供服务的路由地址: 也可以是外网 http://www.baidu.com
              #比如: 客户端/浏览器请求 url http://localhost:20000/member/get/1
              #如果根据Path匹配成功 最终访问的url/转发url 就是 url=http://localhost:10000/member/get/1
              #如果匹配失败, 则有gateway返回404信息
              #疑问: 这里配置的 uri 是固定,在当前这种情况其实可以没有有Eureka Server,后面会使用灵活方式
              #     配置,就会使用到Eureka Server
              #uri: http://localhost:10000
              #解读
              #1. lb: 协议名 , member-service-provider 注册到eureka server 服务名(小写)
              #2. 默认情况下,负载均衡算法是轮询
              uri: lb://member-service-provider
              predicates: #断言,可以有多种形式
                - Path=/member/get/**
                - Method=GET
            - id: member_route02 #路由的id, 程序员自己配置,要求唯一
              #uri: http://localhost:10000
              uri: lb://member-service-provider
              predicates: #断言,可以有多种形式
                #这时如果客户端/浏览器 访问gateway 的url http://localhost:20000/member/save
                #匹配Path成功 最终访问的url 就是 http://localhost:10000/member/save
                - Path=/member/save
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    测试

    启动e-commerce-eureka-server-9001
    启动member-service-provider-10000/10002
    启动e-commerce-gateway-20000
    Postman 测试
    输入: http://localhost:20000/member/get/1

    image-20230828173243527

    Path Route Predicate

    实例

    1. 参考文档:
      https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.1.RELEASE/reference/html/#gateway-request-predicates-factories

    image-20230828173319658

    解读: Path 可以有多个, 使用逗号间隔

    Query Route Predicate

    需求分析/图解

    1.需求: 请求有参数email ,并且满足电子邮件的基本格式, 才能匹配/断言成功

    代码实现

    1. 参考文档:
      https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.1.RELEASE/reference/html/#gateway-request-predicates-factories

    image-20230828173432016

    解读: red 是参数名gree. 是值, 支持正则表达式.

    1. 修改e-commerce-gateway-20000 的application.yml
          routes: #配置路由,可以配置多个路由 List routes
            - id: member_route01 #路由的id, 程序员自己配置,要求唯一
              #gateway 最终访问的url 是 url=uri+Path
              #匹配后提供服务的路由地址: 也可以是外网 http://www.baidu.com
              #比如: 客户端/浏览器请求 url http://localhost:20000/member/get/1
              #如果根据Path匹配成功 最终访问的url/转发url 就是 url=http://localhost:10000/member/get/1
              #如果匹配失败, 则有gateway返回404信息
              #疑问: 这里配置的 uri 是固定,在当前这种情况其实可以没有有Eureka Server,后面会使用灵活方式
              #     配置,就会使用到Eureka Server
              #uri: http://localhost:10000
              #解读
              #1. lb: 协议名 , member-service-provider 注册到eureka server 服务名(小写)
              #2. 默认情况下,负载均衡算法是轮询
              uri: lb://member-service-provider
              predicates: #断言,可以有多种形式
                - Path=/member/get/**
                - Query=email, [\w-]+@([a-zA-Z]+\.)+[a-zA-Z]+
            - id: member_route02 #路由的id, 程序员自己配置,要求唯一
              #uri: http://localhost:10000
              uri: lb://member-service-provider
              predicates: #断言,可以有多种形式
                #这时如果客户端/浏览器 访问gateway 的url http://localhost:20000/member/save
                #匹配Path成功 最终访问的url 就是 http://localhost:10000/member/save
                - Path=/member/save
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    测试

    启动e-commerce-eureka-server-9001
    启动member-service-provider-10000/10002
    启动e-commerce-gateway-20000
    Postman 测试
    输入: http://localhost:20000/member/get/1

    image-20230828173547394

    RemoteAddr Route Predicate

    需求分析/图解

    1. 需求: 请求的IP 是127.0.0.1, 才能匹配/断言成功

    代码实现

    1. 参考文档:
      https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.1.RELEASE/reference/html/#gateway-request-predicates-factories

    image-20230828173643641

    1. 修改e-commerce-gateway-20000 的application.yml
          routes: #配置路由,可以配置多个路由 List routes
            - id: member_route01 #路由的id, 程序员自己配置,要求唯一
              #gateway 最终访问的url 是 url=uri+Path
              #匹配后提供服务的路由地址: 也可以是外网 http://www.baidu.com
              #比如: 客户端/浏览器请求 url http://localhost:20000/member/get/1
              #如果根据Path匹配成功 最终访问的url/转发url 就是 url=http://localhost:10000/member/get/1
              #如果匹配失败, 则有gateway返回404信息
              #疑问: 这里配置的 uri 是固定,在当前这种情况其实可以没有有Eureka Server,后面会使用灵活方式
              #     配置,就会使用到Eureka Server
              #uri: http://localhost:10000
              #解读
              #1. lb: 协议名 , member-service-provider 注册到eureka server 服务名(小写)
              #2. 默认情况下,负载均衡算法是轮询
              uri: lb://member-service-provider
              predicates: #断言,可以有多种形式
                - Path=/member/get/**
                #提示:通过http://127.0.0.1:20000/member/get/1 ,可以看到效果.
    			- RemoteAddr=127.0.0.1
            - id: member_route02 #路由的id, 程序员自己配置,要求唯一
              #uri: http://localhost:10000
              uri: lb://member-service-provider
              predicates: #断言,可以有多种形式
                #这时如果客户端/浏览器 访问gateway 的url http://localhost:20000/member/save
                #匹配Path成功 最终访问的url 就是 http://localhost:10000/member/save
                - Path=/member/save
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    测试

    启动e-commerce-eureka-server-9001
    启动member-service-provider-10000/10002
    启动e-commerce-gateway-20000
    浏览器:(通过网关访问) http://localhost:20000/member/get/1

    image-20230828213549702

    文章到这里就结束了,如果有什么疑问的地方请指出,诸大佬们一起来评论区一起讨论😁
    希望能和诸大佬们一起努力,今后我们一起观看感谢您的阅读🍻
    如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力🤞

  • 相关阅读:
    为什么资源隔离对HTAP至关重要?
    pandas索引操作、赋值操作、排序以及Series排序和DataFrame排序
    Java基础
    Podfile、Podfile.lock、Manifest.lock、Podspec
    js高级:数据、内存、变量的定义与关系
    【代码随想录】算法训练计划28
    雷达阵列天线孔径的概念及其相关意义
    MySQL 事务-学习记录
    04-Vue的简单动画Transition,动画钩子函数,Animate第三方动画库,TransitionGroup列表动画
    Maven 入门教程
  • 原文地址:https://blog.csdn.net/m0_73557631/article/details/133412449