开发者学堂课程【Spring Cloud 微服务架构设计与开发实战 :3.10 Spring Cloud Gateway 实战接入 Nacos 服务】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/60/detail/1093
3.10 Spring Cloud Gateway 实战接入 Nacos 服务
内容介绍
一、Gateway 与 Nacos 介绍
二、Gateway 集成 Nacos
三、Spring Cloud Gateway 新特性
四、改造 Spring Cloud Gateway 网关
五、改造 Spring Cloud Gateway 网关配置
六、练习
一、Gateway 与 Nacos 介绍
Gateway 是官方网关工具。现在是希望 Gateway 与阿里巴巴 Nacos 注册中心进行集成,但是这两者是两个不同的公司贡献的项目。Nacos 在国内有很多公司使用,而且 Nacos 作为一个分布式的注册中心,它不仅能够做注册和服务发现治理,而且还可以做统一配置服务。
Nacos 本身并不是只支持 Spring Cloud,还可以支持 Go 语言等。
二、Gateway 集成 Nacos
Spring Cloud Gateway 可以直接和之前的微服务的项目直接改造进行集成。但现在比较特殊,需要去和 Nacos 进行搭配。
Nacos(之前讲过,做过实践演练,不会的话可以去找 Nacos 实践演练的课程)。现在需要下载,然后启动,启动之后,有集群模式和单列模式,但是要稍微注意一下这个参数,有可能会在机器上不能运行(有可能是环境问题或者jk版里面的问题,有可能是配置文件问题)。但是 Gateway 本身和 Nacos 集成,Nacos 生产环境下可以使用集训模式。
三、Spring Cloud Gateway 新特性
1.基于 Spring 5, Project Reactor 和 Spring Boot 2.0构建
2.能够匹配任何请求路由。
3.特定路由专用 Predicate 谓词和过滤器 Filter 特。
4.集成 Hystrix 断路器。
5.集成 Spring Cloud DiscoveryClient
6.易于编写谓词和过滤器
7.请求速率限制
8.路径重写
9.非阻塞 API ,响应式 API ,高并发
四、改造 Spring Cloud Gateway 网关
简单来说,就是要把之前的 Gateway 项目重构、升级,然后让它去支持 Nacos 服务。之前的微服务需要改造一下,要支持 Nacos 中心服务。这两个对接成功之后,才可以做后续的一些工作。
核心是 Nacos 本身开发了一个客户的依赖,要集成客户端项目,然后具备与 Nacos进行通信的功能。
五、改造 Spring Cloud Gateway 网关配置
集成的时候,可能会有错误会有bug,可能在后续的时候官方的版本中修复好
#gateway
spring.cloud.gateway.enabled=true
spring.cloud.gateway.discovery.locator.enabled=true
spring.cloud.gateway.discovery.locator.lower-case-servise-id=true
#Nacos
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
六、练习
复制 Gateway 项目, 把 Gateway 项目改为 Nacos 式
#Nacos
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
需要加入依赖,支持 Nacos 中心的位移
完成改进,改为之后其他地方不需要动,启动 Nacos 的网关
Nacos 已经可以启动了
点开服务列表,网关已经建立了,这里有个 getway,还有 taobao-Nacos ,现在需要使用 getway 来调动微服务,证明整个基于 Nacos 系统改造成功。
直接打开微服务,因为此时的微服务是后端直接是在8201上,所以可以直接调用,且测试正常。接下来做接网关的改造测试,注意地址是小写:localhost:100000、taobao-nacos-microservice/hi, 此时再测试,仍旧成功
经过新的 springcloud 的 gateway 是和 nacos 获取了最新的服务状态,看看能不能设置一个多实例呢?接下来来模拟一个集群,为了保证他的多可用,此时刷新会发现,显示会在两个中轮换显示,此时点开服务中心,可以看到两个服务。
后期如果有需要的话,可以结合 docer 上线更多的微服务,需要多少可以上线多少。这里就是体现了微服务的弹性。