category
学习思考
date
Jul 26, 2022
icon
Origin
password
slug
gateWay
status
Published
summary
关于服务网关的一些理解
tags
Tags
type
Post
URL
简介:
gateway是zuul1.x版本的替代
SpringCloud GateWay使用的Webflux中的reactor-netty响应式编程组件,底层使用了Netty通讯组件。
Gateway是基于异步非阻塞模型上进行开发的,性能方面不需要担心,综合很多方面考虑,Gateway是十分理想的网关选择。
SpringCloud Gateway具有以下特性:
基于springFramework 5 、project reactor和Springboot2.0进行构建
动态路由:能够匹配任何请求属性;
可以对路由指定 Predicate(断言)和Filter(过滤器)
继承Hystrix的断路器功能
继承SpringCloud服务发现功能
易于编写的Predicate(断言)和Filter(过滤器)
请求限流功能
支持路径重写
三大核心概念:
Route(路由):
路由是构建网关的基本模块,它由ID,目标URI,一系列的断言和过滤器组成,如果断言为true则匹配该路由。
Predicate(断言):
参考的是 java8 的java.util.function.Predicate
开发人员可以匹配 HTTP 请求中的所有内容(例如请求头或者请求参数),如果请求与断言匹配则进行路由
Filter(过滤器):
指的是Spring框架中GatewayFilter的实例,使用过滤器,可以在请求在路由前和之后对请求进行修改。
核心逻辑:
路由转发+执行过滤链
配置:
yml文件配置:
代码中注入LoadLocator的Bean
以转发百度国内新闻为例,代码如下:
GateWay配置动态路由:
默认情况下GateWay会根据注册中心注册的服务列表,以注册中心上微服务名为路径创建动态路由并进行转发,从而实现动态路由的功能。
新增yml配置如下:
开启注册中心动态配置路由功能,更改uri,lb是负载均衡的意思,cloud-payment-service是在Eureka注册中心的服务名称。
Predicate的使用:
Spring Cloud GateWay将路由匹配作为Spring WebFlux HandlerMapping 基础架构的一部分
Spring Cloud GateWay包括很多内置的Route Predicate 工厂。所有这些Predicate都与HTTP请求的不同属性匹配。多个Route Predicate 工厂可以进行组合
Spring Cloud GateWay 创建Route对象时,使用RoutePredicateFactory创建Predicate对象,Predicate可以赋值给Route。Spring CLoud GateWay包含许多内置的RoutePredicateFactory。
常用的RoutePredicate:
After Route Predicate:
在predicate配置下新增:
- After=2022-07-27T15:47:01.216+08:00[Asia/Shanghai]这样的时间格式配置,如下Before Route Predicate:
在predicate配置下新增:
- Before=2022-07-27T15:47:01.216+08:00[Asia/Shanghai]这样的时间格式配置Between Route Predicate:
两个时间之间使用” , ”进行隔离
Cookie Route Predicate:
需要两个参数,一个是Cookie name 一个是 正则表达式。路由规则会根据对应的Cookie name和正则表达式去匹配,如果匹配上就会执行路由,如果没匹配上则不执行
Header Route Predicate:
和cookie差不多,一个是名字,一个是正则表达式
- Header=X-Request-Id,\d+ #请求头要有X-Request-Id属性并且是整数GateWay的filter:
路由过滤器可以用于修改进入的HTTP请求和返回的HTTP响应,路由过滤器只能指定路由进行使用。Spring Cloud Gateway内置了多种路由过滤器,他们都由GatewayFilter的工厂类进行产生。
生命周期:
pre、post
种类:
GatewayFilter(单一的)、GlobalFilter(全局的)
自定义过滤器:
两个主要接口:
GlobalFilter,Order新建配置类,实现上述接口,代码如下:
- 作者:LiuJixue
- 链接:https://liujixue.cn/article/gateWay
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。







