微服务:5-1-1 服务网关-Gateway

1、Gateway概述

1、Gateway是什么?

SpringCloud Gateway使用的Webflux中的reactor-netty响应式变编程组件,底层使用了Netty组件
gateway1

2、Gateway能干什么?

1、反向代理

2、鉴权

3、流量控制

4、熔断

5、日志监控等等

企业一般架构:
gateway2

3、选择Gateway的原因?

1、
gateway3

2、SpringCloud Gateway具有如下特性
gateway4

3、SpringCloud Gateway与Zuul的区别
gateway5

4、Zuul模型
gateway6

5、Gateway模型
gateway7

2、Gateway三大核心概念

1、Route(路由)

路由是构建网关的基本模块,它由ID,目标URI,一系列的断言和过滤器组成,如果断言为true则匹配该路由

2、Predicate(断言)

参考Java8的Predicate,开发人员可以匹配HTTP请求中的所有内容(例如请求头或请求参数),如果请求与断言相匹配则进行路由

3、Filter(过滤)

Spring框架中GatewayFilter的实例,使用过滤器,可以在请求被路由前或路由后对请求修改

4、总结

gateway8

3、Gateway工作流程

gateway9

核心逻辑:路由转发+执行过滤链

4、入门配置

Gateway自己本身也是一个微服务,需要搭建

1、新建module

新建module:cloud-gateway-gateway9627

2、改POM

gateway10
gateway网关微服务不需要引入web依赖

3、写YML

gateway11

4、业务类

无业务逻辑,可看作看门的

5、主启动类

gateway12

6、gateway9527如何做路由映射?

前面的项目8001提供服务,如果我们不想暴露8001端口,可以在8001外面套一层gateway9527

1、在gateway9527中新增配置
gateway13
为8001中的接口配置一层网关

2、访问说明
gateway14

gateway15

6、gateway网关两种配置

1、在配置文件yml中配置
如上面

2、代码中注入RouteLocator的Bean
改造上面的项目,新建config包,包下新建配置类gatewayConfig
gateway16

5、通过微服务名实现动态路由

1、在客户端80和服务提供端8001(或服务端集群)之间加了网关Gateway之后,网关Gateway需要做负载均衡。

2、默认情况下Gateway会根据注册中心的服务列表,以注册中心上微服务名为路径创建动态路由 进行转发,从而实现动态路由功能

3、实现
修改网关的yml文件,开启注册中心服务发现功能,将写死的服务端路由地址改成服务端在注册中心注册后动态路由的地址
gateway17

gateway18

6、Predicate的使用

1、启动网关9527后可以看到
gateway19

2、Route Predicate Factories是什么?
gateway20

3、常用的Route Predicate
gateway21

总结:Predicate就是为了实现一组匹配规则,让请求过来找对应的Route进行处理。

7、Filter的使用

1、Filter是什么

gateway22

2、Spring Cloud Gateway的Filter

1、生命周期,只有两个
(1)pre 业务逻辑之前
(2)post 业务逻辑之后

2、种类
(1)GatewayFilter 单一的
(2)GlobalFilter 全局的

3、常用的GatewayFilter

Filter非常多,这里仅示例用法,具体参考官网
示例
gateway23

4、自定义GlobalFilter

两个主要接口
implement GlobalFilter,Ordered

1、在gateway9527模块下新建包filter,包下新建MyGlobalFilter类
gateway24

2、全局GlobalFilter能干嘛
(1)全局日志记录
(2)统一网关鉴权等等