科讯cms网站管理系统kesioncms,上海优秀设计公司,网站开发主流语言,商城网站需要多少空间背景
最近引入了 Nacos Config 配置管理能力#xff0c;说起来用法很简单#xff0c;还是踩了三个坑。
Nacos Config 的 nacos 的帐号密码加密配置后#xff0c;怎么解密而且在 NacosConfigBootstrapConfiguration 真正注入 Nacos Config 注入之前#xff0c;而且不能触发…背景
最近引入了 Nacos Config 配置管理能力说起来用法很简单还是踩了三个坑。
Nacos Config 的 nacos 的帐号密码加密配置后怎么解密而且在 NacosConfigBootstrapConfiguration 真正注入 Nacos Config 注入之前而且不能触发 NacosDiscoveryProperties 的 isNacosDiscoveryInfoChanged 变动事件。因为 NacosDiscoveryProperties 接受 NacosContextRefresher 事件时还是从 yml 配置中获取属性不会从 Environment 对象中加载。RefreshScope 要想生效该注意什么非 shared-config 的配置变动时要想实时生效必须在当前应用的 bootstrap.yml 中配置 spring.application.name 属性注册该应用在配置中心需要监听的配置。RefreshScope LoadBalanced 同时使用导致 Ribbon 负载均衡失效问题。
问题一比较复杂此处不做讨论本文记录问题三的解决方法及个人思考。
问题
有个模块使用了 LoadBalanced 负载均衡通过配置控制超时时间。
引入 Nacos Config 配置后按照常规用法在对象上添加了 RefreshScope 属性希望配置变动时能实时生效。
注入代码如下
Value(${rest.template.connect-timeout:10000})
private Integer connectTimeout;Value(${rest.template.read-timeout:10000})
private Integer readTimeout;Bean
RefreshScope
LoadBalanced
public RestTemplate restTemplate(RestTemplateBuilder builder){
SimpleClientHttpRequestFactory requestFactory new SimpleClientHttpRequestFactory();requestFactory.setConnectTimeout(connectTimeout); //连接超时设置requestFactory.setReadTimeout(readTimeout); //读写超时设置RestTemplate restTemplate new RestTemplate(requestFactory);logger.info(初始化负载均衡的 RestTemplate 对象 {} {}, connectTimeout, readTimeout);return restTemplate;}修改配置中心的配置后可以监控到 RestTemplate 会在配置变化后重新初始化了也打印了最新的配置。
但真正使用这个类调用某个服务时出现了服务无法解析的异常
分析
首先检查调用的目标服务是否注册成功目标服务是正常启动的。
其次对比其他同样引用了 LoadBalanced 的 RestTemplate 的模块它调用是正常的。
最后对比异常调用和正常调用的注入代码的区别多了一个 RefreshScope 调整代码验证结果正常。引入 RefreshScope 时在配置变化后才会发生这个异常首次运行时正常的。
延伸搜索发现负载均衡 RestTemplate 也有类似的问题 scope(“prototype”)loadbalanced注解时负载均衡失效问题。
启示录
LoadBalanced 和 RefreshScope 同时使用首次初始化时RestTemplate 对象具有负载均衡的能力当 Nacos 配置中的配置变动时这个对象会重新创建而且此时并没有使用 LoadBalanced 的能力导致负载均衡失效。
就是说这两个注解同时使用时在不同的时机只会有一个注解生效
初始创建时LoadBalanced 生效系统中的实例是负载均衡的 RestTemplate当 Nacos 配置变化NacosContextRefresher 触发通知 RefreshScope 注解的 Bean 对象时重新创建的实例就是普通的 RestTemplate 了。
引入任何一个第三方工具面对的都是黑盒各种资料用法看似简单一用就坑不断啊建议 Nacos Config 官方配置给出一个使用建议 RefreshScope 不要用在 LoadBalanced 注解上。
最后记录一个偶然的发现 选中几个图片文件后右侧概览图是一个堆叠的图才注意到