一、概述
(1)定义阐释
- 官方站点:Spring Cloud Gateway
- 体系中的定位
(2)微服务架构里网关的位置
(3)具备的功能
- 反向代理
- 身份验证
- 流量调控
- 熔断机制
- 日志监测
(4)总结归纳
二、Gateway 三大核心要素
(1)官网总述
(2)细分解读
2.2.1Route(路由)
路由是构建网关的基本组成部分,它由ID、目标URI以及一系列的断言和过滤器构成,当断言结果为true时就匹配该路由
2.2.2Predicate(断言)
- 参考的是Java8中的java.util.function.Predicate
- 开发人员能够匹配HTTP请求中的各类内容,比如请求头或者请求参数等,如果请求与断言相契合就进行路由转发
2.2.3Filter(过滤)
指的是Spring框架中GatewayFilter的实例,借助过滤器,可以在请求被路由前后对请求进行修改
(3)总结概括
- web前端发起请求,通过一些匹配条件,定位到真实的服务节点。并且在这个转发过程的前后,进行一些精细化的控制
- predicate就是我们的匹配条件
- filter可以理解为一个功能强大的拦截器。有了这两个元素,再加上目标uri,就能够实现一个具体的路由
三、Gateway 工作流程
(1)官网总结
- 客户端的请求发送到Spring Cloud Gateway后,首先通过Gateway Handler Mapping来匹配路由,然后交给Gateway Web Handler。Handler会借助过滤器链,将请求发送到实际服务去处理业务并返回结果
- 过滤器分为两类:
- Pre 过滤器:在代理请求之前执行,用于参数校验、权限校验、流量监控、日志输出、协议转换等
- Post 过滤器:在代理请求之后执行,能够修改响应内容或头信息,输出日志、监控流量等,作用十分关键
(2)核心逻辑
路由转发+断言判断+执行过滤器链
四、入门配置
(1)创建Module
cloud-gateway9527
(2)修改POM
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.atguigu.cloud</groupId>
<artifactId>mscloudV5</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>cloud-gateway9527</artifactId>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!--gateway-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!--服务注册发现consul discovery,网关也要注册进服务注册中心统一管控-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
<!-- 指标监控健康检查的actuator,网关是响应式编程删除掉spring-boot-starter-web dependency-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
(3)编写YML
server:
port: 9527
spring:
application:
name: cloud-gateway
cloud:
consul:
host: localhost
port: 8500
discovery:
prefer-ip-address: true
service-name: ${spring.application.name}
(4)主启动类
(5)业务类
无,不编写任何业务代码,网关与业务并无直接关联
(6)测试环节
- 首先启动8500服务中心Consul
- 然后启动9527网关进行入驻
五、9527 网关如何进行路由映射
(1)9527 网关路由映射的方式
5.1.1需求阐述
我们当下不希望暴露8001端口,期望在8001真正的支付微服务外面套一层9527网关
5.1.28001 新建 PayGateWayController
5.1.3启动 8001
支付服务
5.1.48001 自测验证
- http://localhost:8001/pay/gateway/get/1
- http://localhost:8001/pay/gateway/info
(2)9527 网关 YML 新增配置
(3)测试 1
5.3.1启动 Consul8500 服务
5.3.2启动 8001 支付服务
5.3.3启动 9527 网关
5.3.4访问说明
(1)添加网关前
(2)隐真示假,映射说明
(3)添加网关后
5.3.5目前 8001 支付微服务前面添加 GateWay 成功
(4)测试 2
5.4.1启动订单微服务进行测试,查看是否能通过网关?
(1)修改 cloud-api-commons
PayFeignApi接口
(2)修改 cloud-consumer-feign-order80
(3)网关开启状态
(4)网关关闭状态
(5)结论
- 9527 网关是否启动,没有影响,o (π﹏π) o
- 目前的配置来看,网关被绕开了……
5.4.2正确做法
(1)同一家公司内部,系统内环境,直接访问微服务
(2)不同公司有外部访问,系统外访问,先经网关再到服务
- 刷新 feign 接口 jar 包
- 重启 80 订单微服务
- 有网关正常 success
- 无网关异常
(5)存在问题
请查看网关 9527 的 yml
配置,映射写死问题,^_^
六、GateWay
高级特性
(1)Route 以微服务名 - 动态获取服务 URI
6.1.1痛点分析
6.1.2定义说明
6.1.3解决 uri 地址写死问题
- 9527 修改前 YML
- 9527 修改后 YML
6.1.4测试 1
- 重启网关 9527,80/8001 保持不变
- http://localhost/feign/pay/gateway/get/1
6.1.5测试 2
- 如果将 8001 微服务 yml 文件端口修改为 8007,照样可以访问
- 我实际启动的程序是 main8001 但是端口名改为 8007
- 我们依据微服务名字,匹配查找即可uri: lb://cloud-payment-service
(2)Predicate 断言 (谓词)
6.2.1定义阐释
- Spring Cloud Gateway
- Route Predicate Factories这是什么东西?
6.2.2启动微服务 gateway9527,查看 IDEA
后台的输出
文章整理自互联网,只做测试使用。发布者:Lomu,转转请注明出处:https://www.it1024doc.com/12630.html