category
学习思考
date
Jul 26, 2022
icon
Origin
password
slug
gateWay
status
Published
summary
关于服务网关的一些理解
tags
Tags
type
Post

简介:

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
新建配置类,实现上述接口,代码如下:
 
 
 
 
 
 
Nacos配置Mysql数据源(Mysql和Nacos同为Docker启动)-No DataSource set的解决方法Hystrix服务降级框架
Loading...