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();
}

最新文章

  1. 节省Json流量
  2. css挤带边框的三角
  3. Newtonsoft.Json 通过 JObject 读取 json对像 超简单
  4. Timer类和TimerTask类
  5. ubuntu下phpmyadmin配置
  6. 如何从NFS文件系统启动
  7. 实战Django:官方实例Part1
  8. MongoDB 学习笔记(一)基础篇
  9. hdu5514-Frogs(容斥原理)好题
  10. Skyline中使用AxTE3DWindowEx打开新的一个球体
  11. Js-Html 前端系列--显示有格式的文本
  12. 微信小程序开发之微信支付
  13. 团队作业4——第一次项目冲刺 tHe LaSt dAy
  14. vs code调试console程序报错--preLaunchTask“build”
  15. Django rest framework源码分析(1)----认证
  16. Kubernetes — 为什么我们需要Pod?
  17. mongo 更新字段值,若不存在则自动创建
  18. 新硬盘挂载-fdisk+mount案例实操
  19. 静态方法(staticmethod)和类方法(classmethod)
  20. Python Redis 管道

热门文章

  1. 网络拓扑实例之交换机处于同一网络作为DHCP中继与服务器(八)
  2. 2014_07_11_VGA基础及封装
  3. Android中Application的意义及使用方法
  4. 浅尝 Elastic Stack (二) Logstash
  5. 查询Oracle日志文件的方法
  6. OpenCV-Python setMouseCallback回调函数中图像变量img的传递方法解析
  7. opencv-python imread、imshow浏览目录下的图片文件
  8. PLSQL Developer 工具应用
  9. [GKCTF2020]cve版签到
  10. VS Code 搭建 Rust 开发环境