一、Gateway简介
1.介绍:Spring Cloud Gateway 旨在为微服务架构提供一种简单且有效的 API 路由的管理方式,并基于 Filter 的方式提供网关的基本功能,例如说安全认证、监控、限流等等
2.概念:
- 路由(route)
路由是网关中最基础的部分,路由信息包括一个ID、一个目的URI、一组断言工厂、一组Filter组成。 - 断言(predicates)
Java8中的断言函数,SpringCloud Gateway中的断言函数类型是Spring5.0框架中的ServerWebExchange。断言函数允许开发者去定义匹配Http request中的任何信息,比如请求头和参数等。如果断言为真,则说明请求的URL和配置的路由匹配。 - 过滤器(Filter)
SpringCloud Gateway中的filter分为Gateway FilIer和Global Filter。Filter可以对请求和响应进行处理。
二、Gateway原理
1.工作原理:
Spring Cloud Gateway 的工作原理跟 Zuul 的差不多,最大的区别就是 Gateway 的 Filter 只有 pre 和 post 两种。
2.架构图:
1.客户端向 Spring Cloud Gateway 发出请求,如果请求与网关程序定义的路由匹配,则该请求就会被发送到网关 Web 处理程序,此时处理程序运行特定的请求过滤器链。
2.过滤器之间用虚线分开的原因是过滤器可能会在发送代理请求的前后执行逻辑。所有 pre 过滤器逻辑先执行,然后执行代理请求;代理请求完成后,执行 post 过滤器逻辑。
Gateway其实很简单,就是利用了大量的filter来对请求进行处理。因此我们想要实现一些公共功能是就可以通过filter实现,像上面提到的加解密、认证、健康,监控、限流等等。
三、Gateway使用
1.引入依赖
<!-- gateway网关 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!-- nacos服务注册与发现 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
2.编译yaml配置文件
spring:
application:
name: gateway-demo
#配置nacos注册中心地址
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
#网关配置
gateway:
#设置路由:路由id、路由到微服务的uri、断言
routes:
# 订单服务路由配置
- id: order_route #路由ID,全局唯一,建议配置服务名
uri: lb://order-service #lb 整合负载均衡器ribbon,loadbalancer
predicates:
- Path=/order/** # 断言,路径相匹配的进行路由
# 库存服务路由配置
- id: stock_route #路由ID,全局唯一,建议配置服务名
uri: lb://stock-service #lb 整合负载均衡器ribbon,loadbalancer
predicates:
- Path=/stock/** # 断言,路径相匹配的进行路由
3.访问具体url测试(网关服务默认使用端口8888)
http://localhost:8888/order/getOrder.
8888端口是网关服务监听的端口,请求访问到网关后,网关会判断是否满足配置的路由规则。根据配置的路由规则 Path=/order/ 将访问路径替换成 http://order-service/order/getOrder 然后在经过整个的loadbalanceclient根据服务名称从nacos获取具体访问的机器IP、Port.