基于阿里开源的Sentinel实现了服务的限流与容错,并详细介绍了Sentinel的核心技术与配置规则。简单介绍了服务网关,并对SpringCloud Gateway的核心架构进行了简要说明,也在项目中整合了SpringCloud Gateway网关实现了通过网关访问后端微服务。
同时,也基于SpringCloud Gateway整合Sentinel实现了网关的限流功能,详细介绍了SpringCloud Gateway网关的核心技术。在链路追踪章节,我们开始简单介绍了分布式链路追踪技术与解决方案,随后在项目中整合Sleuth实现了链路追踪,并使用Sleuth整合ZipKin实现了分布式链路追踪的可视化 。
在消息服务章节,我们介绍了MQ的使用场景,引入MQ后的注意事项以及MQ的选型对比,在项目中整合了RocketMQ,并给大家介绍了RocketMQ的核心技术。
在服务配置章节,我们首先介绍了服务配置与Nacos作为配置中心的相关概念。接下来,我们就正式在项目中整合Nacos配置中心。
本章总览
「注意:本章中在测试每个案例时,都需要启动Nacos,Sentinel,ZipKin和RocketMQ。另外,本章对应的Nacos配置(冰河亲测的Nacos配置)放在了项目源码的doc/nacos/config/chapter22目录下,小伙伴们将Nacos的配置直接导入到Nacos的配置列表中,也可以按照文章自己手动实现。」
环境准备
分别在用户微服务shop-user,商品微服务shop-product,订单微服务shop-order和网关服务shop-gateway中的pom.xml文件中添加如下依赖。
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
服务整合Nacos配置中心
这里,我们将用户微服务,商品微服务,订单微服务和网关服务的配置信息都放在Nacos中。
「注意:将微服务的配置放在Nacos中时,就暂时不用微服务中的application.yml配置文件了,而是在项目中新建一个bootstrap.yml文件。因为配置文件的优先级从高到低依次为:bootstrap.properties -> bootstrap.yml -> application.properties -> application.yml。」
用户微服务整合配置中心
(1)在用户微服务shop-user的resources目录下新建bootstrap.yml文件,文件内容如下所示。
spring:
application:
name: server-user
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
file-extension: yaml
group: user_group
profiles:
active: dev
(2)启动Nacos,在浏览器中输入http://localhost:8848/nacos并登录Nacos,选择Nacos菜单中的配置管理-配置列表,如下所示。
(3)点击配置列表界面中的 「+」 ,如下所示。
点开后的界面如下所示。
其中各个配置项的含义如下所示。
- Data ID就是配置集ID,通常情况下就是某个配置文件的ID,这个ID的命名遵循一定的规则,如下所示。
${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
这里,对应到用户微服务的Data ID就是:server-user-dev.yaml。所以,对于用户微服务来说,我们在Data ID中输入server-user-dev.yaml。
- Group:配置分组,配置分组要与spring.cloud.nacos.config.group对应,用户微服务的配置分组就是user_group。
- 描述:对当前配置的简单描述。例如,用户微服务的开发环境配置。
- 配置格式:表示配置内容所使用的文件格式,这里我们选择YAML格式。
- 配置内容:配置文件的内容,这里我们直接将application.yml文件的内容复制进去即可。
配置好之后的内容如下所示。
配置好之后点击页面的发布按钮,如下所示。
发布成功后会跳转到配置管理-配置列表界面,如下所示。
(4)注释掉用户微服务shop-user的resources目录下的application.yml文件中的内容(重要,不要忘记)。
至此,就完成了修改用户微服务的配置操作。
商品微服务整合配置中心
修改商品微服务的配置过程与修改用户微服务的配置过程类似,只是部分配置项不同。
(1)在商品微服务shop-product的resources目录下新建bootstrap.yml文件,内容如下所示。
spring:
application:
name: server-product
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
file-extension: yaml
group: product_group
profiles:
active: dev
(2)在Nacos中的配置信息如下所示。
(3)注释掉商品微服务shop-product的resources目录下的application.yml文件中的内容(重要,不要忘记)。
订单微服务整合配置中心
修改订单微服务的配置过程与修改用户微服务的配置过程类似,只是部分配置项不同。
(1)在订单微服务shop-order的resources目录下新建bootstrap.yml文件,内容如下所示。
spring:
application:
name: server-order
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
file-extension: yaml
group: order_group
profiles:
active: dev
(2)在Nacos中的配置信息如下所示。
(3)注释掉订单微服务shop-order的resources目录下的application.yml文件中的内容(重要,不要忘记)。
网关服务整合配置中心
修改网关服务的配置过程与修改用户微服务的配置过程类似,只是部分配置项不同。
(1)在网关服务shop-gateway的resources目录下新建bootstrap.yml文件,内容如下所示。
spring:
application:
name: server-gateway
main:
allow-bean-definition-overriding: true
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
file-extension: yaml
group: gateway_group
profiles:
active: dev
(2)在Nacos中的配置信息如下所示。
(3)注释掉网关服务shop-gateway的resources目录下的application.yml文件中的内容(重要,不要忘记)。
查看Nacos中的配置
将用户微服务、商品微服务、订单微服务、网关服务的配置添加到Nacos中后,Nacos中的配置管理-配置列表如下所示。
整合Nacos配置中心测试
(1)分别启动Nacos、Sentinel、ZipKin、RocketMQ的NameServer和Broker。
(2)分别启动用户微服务、商品微服务、订单微服务和网关服务,如果启动成功,基本就说明项目整合Nacos配置中心成功。
(3)启动四个服务后,在浏览器中输入localhost:10001/server-order/order/submit_order?userId=1001&productId=1001&count=1,如下所示。
查看各个微服务中也会打印出相关的日志,如下所示。
- 用户微服务会打印出如下信息。
获取到的用户信息为:{"address":"北京","id":1001,"password":"c26be8aaf53b15054896983b43eb6a65","phone":"13212345678","username":"binghe"}
用户微服务收到了订单信息:{"address":"北京","id":15235872727371776,"phone":"13212345678","totalPrice":2399.00,"userId":1001,"username":"binghe"}
- 商品微服务会打印出如下信息。
获取到的商品信息为:{"id":1001,"proName":"华为","proPrice":2399.00,"proStock":9999}
更新商品库存传递的参数为: 商品id:1001, 购买数量:1
- 订单微服务会打印出如下信息。
提交订单时传递的参数:{"count":1,"empty":false,"productId":1001,"userId":1001}
库存扣减成功
- 网关服务会打印出如下信息。
执行前置过滤器逻辑
执行后置过滤器逻辑
访问接口主机: localhost
访问接口端口: 10001
访问接口URL: /server-order/order/submit_order
访问接口URL参数: userId=1001&productId=1001&count=1
访问接口时长: 1260ms
说明我们的项目中成功整合了Nacos的配置中心。