这是我参与11月更文挑战的第9天,活动详情查看:2021最后一次更文挑战
在SpringCloud微服务体系中,有个很重要的组件就是网关,在1.x版本中都是采用的Zuul网关;但在2.x版本中,zuul的升级一直跳票,SpringCloud最后自己研发了一个网关替代Zuul, 那就是SpringCloud Gateway。
GateWay的核心概念
1.路由
网关的基本构建模块,它是由ID、目标URl、断言集合和过滤器集合定义, 如果集合断言为真,则匹配路由。
2.断言
Predicate: 参照Java8的新特性Predicate。这允许开发人员匹配HTTP请求中的任何内容,比如头或参数。
Gateway提供了很多Predicated供我们选择
1.例如时间匹配
spring:
cloud:
gateway:
routes:
- id: after_route
uri: http://www.google.com
predicates:
- After=2021-11-11T14:33:47.789+08:00
这个路由规则会在东8区的2021-11-11 14:33:47后,将请求都转跳到google。
2.例如Cookie匹配
spring:
cloud:
gateway:
routes:
- id: cookie_route
uri: http://www.google.com
predicates:
- Cookie=cookiename, cookievalue
路由匹配请求存在cookie名为cookiename,cookie内容匹配cookievalue的,将请求转发到google。
3.例如Header匹配
spring:
cloud:
gateway:
routes:
- id: header_route
uri: http://www.google.com
predicates:
- Header=X-Request-Id, \d+
路由匹配存在名为X-Request-Id,内容为数字的header的请求,将请求转发到google。
3.过滤器
Filter: 可以在发送下游请求之前或之后修改请求和响应。
1.能够增加请求的Header的Filter
spring:
cloud:
gateway:
routes:
- id: add_request_header_route
uri: http://www.google.com
filters:
- AddRequestHeader=X-Request-Foo, Bar
对匹配的请求,会额外添加X-Request-Foo:Bar的header。
2.能够增加请求参数的 Filter
spring:
cloud:
gateway:
routes:
- id: add_request_parameter_route
uri: http://www.google.com
filters:
- AddRequestParameter=foo, bar
3.增加响应Header的Filter
spring:
cloud:
gateway:
routes:
- id: add_request_header_route
uri: http://www.google.com
filters:
- AddResponseHeader=X-Response-Foo, Bar
对匹配的请求,响应返回时会额外添加X-Response-Foo:Bar的header返回。
小总结
核心逻辑就是路由转发,执行过滤器链。
1.请求发送到网关,经由分发器将请求匹配到相应的HandlerMapping
2.请求和处理器之间有一个映射,路由到网关处理程序,即Web Handler
3.执行特定的请求过滤器链
但其实网关的功能远远不止这些,网关还能做到统一的熔断,限流,认证,日志监控等,但是核心功能还是路由转发,因此不要在网关上耗时太多,应该快速转发到后端服务上,所以GateWay采用的是WebFlux,加快了整体的响应速度。