实现服务限流和容错,详细介绍了Sentinel的核心技术和配置规则。简单介绍了服务网关,简单说明了SpringCloudGateway的核心架构。项目中还集成了SpringCloudGateway网关,实现通过网关访问后端微服务。同时,基于Sentinel与SpringCloudGateway的集成,实现了网关的限流功能,详细介绍了SpringCloudGateway的核心技术。在链接跟踪章节中,我们简单介绍了分布式链接跟踪技术和解决方案,然后在项目中集成Sleuth实现链接跟踪,并利用Sleuth集成ZipKin实现分布式链接跟踪的可视化。在消息服务章节,我们介绍了MQ的使用场景、引入MQ后的注意事项以及MQ选型对比,在项目中集成了RocketMQ,介绍了RocketMQ的核心技术。在服务配置章节,我们首先介绍了服务配置的概念,以及作为配置中心的Nacos。接下来正式在项目中集成Nacos配置中心。本章概述》注:测试本章每个案例时,需要启动Nacos、Sentinel、ZipKin、RocketMQ。另外,放置本章对应的Nacos配置(Glacier亲测的Nacos配置)在项目源码的doc/nacos/config/chapter22目录下,可以直接将Nacos配置导入Nacos配置列表,也可以按照文章自己手动实现。环境准备分别在用户微服务商店-用户、产品微服务商店-产品、订单微服务商店-订单和网关服务商店-网关的pom.xml文件中添加如下依赖。com.alibaba.cloudspring-cloud-starter-alibaba-nacos-config服务集成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-usercloud:nacos:config:server-addr:127.0.0.1:8848file-extension:yamlgroup:user_groupprofiles:active:dev(2)启动Nacos,输入http://localhost:8848/nacos并登录Nacos,在Nacos菜单中选择配置管理-配置列表,如下图。(3)在配置列表界面点击“+”,如下图。点击后的界面如下图。各配置项含义如下。DataID是配置集ID,通常是某个配置文件的ID。这个ID的命名遵循一定的规则,如下图。${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}这里用户微服务对应的DataID为:server-user-dev。yaml。因此,对于用户微服务,我们在DataID中输入server-user-dev.yaml。group:配置组,配置组要对应spring.cloud.nacos.config.group,用户微服务的配置组为user_group。描述:当前配置的简要描述。比如用户微服务的开发环境配置。配置格式:表示配置内容使用的文件格式,这里我们选择YAML格式。配置内容:配置文件的内容,这里我们可以直接将application.yml文件的内容复制进去。配置后的内容如下。配置完成后,点击页面上的发布按钮,如下图。发布成功后,会跳转到配置管理-配置列表界面,如下图。(4)注释掉用户microserviceshop-user的resources目录下的application.yml文件中的内容(重要,不要忘记)。至此,修改用户微服务的配置操作就完成了。在商品微服务集成配置中心修改商品微服务的配置过程与修改用户微服务类似,只是部分配置项不同。(1)在商品微服务shop-product的resources目录下新建bootstrap.yml文件,内容如下。spring:application:name:server-productcloud:nacos:config:server-addr:127.0.0.1:8848file-extension:yamlgroup:product_groupprofiles:active:dev(2)Nacos中的配置信息如下。(3)将商品微服务shop-product的resources目录下的application.yml文件中的内容注释掉(重要,不要忘记)。在订单微服务集成配置中心修改订单微服务的配置过程与修改用户微服务类似,只是部分配置项不同。(1)在订单微服务shop-order的resources目录下新建bootstrap.yml文件,内容如下。spring:application:name:server-ordercloud:nacos:config:server-addr:127.0.0.1:8848file-extension:yamlgroup:order_groupprofiles:active:dev(2)Nacos中的配置信息如下。(3)将订单微服务shop-order的resources目录下的application.yml文件中的内容注释掉(重要,不要忘记)。在网关服务集成配置中心修改网关服务的配置过程与修改用户微服务类似,只是部分配置项有所不同。(1)在网关服务shop-gateway的resources目录下新建bootstrap.yml文件,内容如下。弹簧:应用程序:名称:服务器网关主要:允许bean定义覆盖:真正的云:nacos:配置:服务器地址:127.0.0.1:8848文件扩展名:yaml组:gateway_group配置文件:活动:dev(2)Nacos中的配置信息如下。(3)将网关服务shop-gateway的resources目录下的application.yml文件中的内容注释掉(重要,不要忘记)。在Nacos中查看配置在Nacos中添加用户微服务、商品微服务、订单微服务、网关服务的配置后,Nacos中的配置管理-配置列表如下。集成Nacos配置中心测试(1)分别启动Nacos、Sentinel、ZipKin、RocketMQNameServer和Broker。(2)分别启动用户微服务、商品微服务、订单微服务和网关服务。如果启动成功,基本代表项目集成Nacos配置中心成功。(3)启动四个服务后,在浏览器中输入localhost:10001/server-order/order/submit_order?userId=1001&productId=1001&count=1,如下图。查看每一个微服务也会打印出相关的日志,如下图。用户微服务会打印出如下信息。获取到的用户信息为:{"address":"Beijing","id":1001,"password":"c26be8aaf53b15054896983b43eb6a65","phone":"13212345678","username":"binghe"}用户微服务集合到达订单信息:{"address":"Beijing","id":15235872727371776,"phone":"13212345678","totalPrice":2399.00,"userId":1001,"username":"binghe"}商品微服务将打印出以下信息。获取到的商品信息为:{"id":1001,"proName":"Huawei","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的配置中心。