Spring Cloud 2.2.2 源码之四十七nacos客户端触发服务刷新原理一

本文深入解析 Nacos 客户端在 Spring Cloud 2.2.2 版本中服务获取与刷新的具体流程。阐述了 Nacos 客户端采用懒加载策略,在首次请求时触发服务信息获取的过程,以及如何通过拦截 RestTemplate 实现服务的动态刷新。

Spring Cloud 2.2.2 源码之四十七nacos客户端触发服务刷新原理一

服务获取和刷新的流程图

在这里插入图片描述

什么时候获取服务

其实当nacos客户端起来之后,并不会去请求服务信息,只是会去做服务注册,配置获取等,那什么时候会获取服务呢,就是第一次请求来的时候,也就是说是懒加载的思想,下面看我慢慢分析。

拦截器拦截RestTemplate

这个就不多说了,以前分析ribbon的时候有讲过,可以看这篇文章
,我就大致的走个流程。
首先是拦截:
在这里插入图片描述
获取负载均衡器:
在这里插入图片描述
创建服务对应的上下文,这里会传入服务名:
在这里插入图片描述

ribbon的属性源里添加一条值为服务名的属性,key为ribbon.client.name,名字为服务名:
在这里插入图片描述
就是这样,属性源属性后面有用到。
在这里插入图片描述
然后刷新上下文,RibbonClientConfigurationname被注入为服务名:
在这里插入图片描述
因为ribbon.client.name就是刷新环境前放进属性源里的:
在这里插入图片描述
接着实例化DefaultClientConfigImpl的时候会将服务名放进去:
在这里插入图片描述
在这里插入图片描述
赋值给clientName,后面会用到:
在这里插入图片描述
后面就跟我们NacosRibbonClientConfiguration里的注入了,下篇说。

好了,今天就到这里了,希望对学习理解有帮助,大神看见勿喷,仅为自己的学习理解,能力有限,请多包涵。

解决 2.2.2.RELEASE 版本 `spring-cloud-starter-alibaba-nacos-discovery` 的 Spring Cloud 路由转发问题,可从以下几个方面着手: ### 依赖配置 确保项目中添加了必要的依赖,以下是 Maven 依赖示例: ```xml <dependencies> <!-- Spring Cloud Gateway --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> <version>2.3.9.RELEASE</version> </dependency> <!-- Spring Cloud Alibaba Nacos Discovery --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>2.2.2.RELEASE</version> </dependency> </dependencies> <dependencyManagement> <dependencies> <!-- Spring Cloud Dependencies --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Hoxton.SR9</version> <type>pom</type> <scope>import</scope> </dependency> <!-- Spring Cloud Alibaba Dependencies --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>2.2.2.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> ``` ### 配置文件 在 `application.yml` 或 `application.properties` 中进行路由配置,以下是 `application.properties` 示例: ```properties spring.cloud.gateway.routes[0].id=service-user spring.cloud.gateway.routes[0].uri=lb://service-user spring.cloud.gateway.routes[0].predicates[0]=Path=/user/** spring.cloud.gateway.routes[1].id=service-goods spring.cloud.gateway.routes[1].uri=lb://service-goods spring.cloud.gateway.routes[1].predicates[0]=Path=/goods/** ``` 上述配置定义了两个路由规则,分别将 `/user/**` 的请求转发到 `service-user` 服务,将 `/goods/**` 的请求转发到 `service-goods` 服务,使用了负载均衡(`lb://`)[^1]。 ### Nacos 配置 若使用 Nacos 进行动态路由配置,需确保 Nacos 配置正确。在不设置 `dataid` 情况下,Nacos 系统有具体的 `dataid` 设置。配置格式可参考上述 `application.properties` 中的路由配置。 ### 代码检查 确保服务已注册到 Nacos,并且服务名正确。同时,检查网关服务是否能够正常连接到 Nacos 服务器。 ### 测试 完成上述配置后,启动网关服务和目标服务,通过访问相应的路由路径进行测试。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值