专栏首页技术趋势问题:springboot多配置中心,解决无法同步更新(nacos/consul)

问题:springboot多配置中心,解决无法同步更新(nacos/consul)

背景

项目springboot 2.x 配置了双配置中心nacos及consul。问题:发现修改的时候无法动态更新,这样导致新做的在线开关功能无法实现开启和关闭,也不符合原来配置中心的作用。相关版本信息如下:

组件名称

版本号

备注

springboot

2.2.7.RELEASE

spring-cloud-starter-alibaba-nacos-config

2.2.7.RELEASE

spring-cloud-starter-alibaba-nacos-discovery

2.2.7.RELEASE

spring-cloud-starter-consul-config

2.2.2.RELEASE

spring-cloud-starter-consul-discovery

2.2.2.RELEASE

排查过程

1、与其他能同步的项目进行对比,发现springcloud项目同样的配置,但是可以同步刷新,但是该项目不行;

2、查看修改后的nacos本地配置文件和日志发现,配置中心修改后的本地没有拉取并且项目中日志没有同步(核心原因);

服务本地文件

nacos配置

consu没有配置。

因为是双注册中心,所以consul会不会可以通讯呢?然后再验证一下consul的配置,发现consul上面其实没有配到,这里发现其实双注册中心中,如果一个配置中心不配置,另外一个配置,那会以有的为主。

其实到这里已经知道核心原因就是没有拉取到,但是因为版本不兼容的原因导致没有拉取?还是因为缺少jar包或者说配置有问题?

然后通过:

https://nacos.io/zh-cn/docs/quick-start-spring-boot.html nacos配置中心的springboot

https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html nacos配置中心的springcloud

规范进行配置,springboot和springcloud。

@Configuration
@RefreshScope
public class NaconsCommonValueConfig {
    @Value("${udeskapicontrol}")
    private String Control;

    @NacosValue(value = "${udeskapicontrol}", autoRefreshed = true)
    private String api;

    public String getControl() {
        return ApiControl;
    }

    public void setControl(String Control) {
        this.Control = Control;
    }

    public String getApi() {
        return api;
    }

    public void setApi(String api) {
        this.api = api;
    }
}

然而发现其实都没有生效~...这时候陷入迷漫中....版本信息、配置以及相关的信息都与官网的一些难道官网有错。

3、重新拉新项止目测试,发现官网提供的demo是可以拉取的。(确认是自身项目原因);

4、因为版本不兼容的原因导致没有拉取?还是因为缺少jar包或者说配置有问题?,上面说的这几种说法都有验证没有关系,那是通讯问题?

关于这个问题其实首先要了解一下 nacos客户端和服务端的通讯区别,这个的话详细看:https://nacos.io/zh-cn/docs/what-is-nacos.html

通过以上架构和nacos的说明得知,nacos客户端有一个监听,检查服务端的配置信息是否发生了变化,如果发生变化则触发通知进行变更。(可以参考底层实现)

问题解决

看了系统日志发现,这个监听其实不生效了,因为有consul nacos 还有其他的一些组件,可能导致各种各要的协调冲突,通过spring官网发现。https://docs.spring.io/spring-cloud-bus/docs/2.2.4.RELEASE/reference/html/

cloud-bus可以做为协调统一消息总线进行协作,引入相关的配置验证,发现还真是。而springcloud alibaba默认引入了:spring-cloud-starter-netflix-hystrix 里面的Stream 承担了消息总线类似的功能(个人认为)

配置如下:

引入bus组件

 <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bus-amqp</artifactId>
 </dependency>

配置文件中加入

#spring.application.name 为项目名称

#spring.cloud.config.profile 为项目环境

spring.cloud.bus.id=${spring.application.name}:${spring.cloud.config.profile}

修改前:

修改配置文件:

更新配置文件,发现项目更新也进行更新。

修改后,动态生效;

问题解决~

通过查询相关的资料发现,spring cloud alibaba项目中已经集成了类似消息总线的组件,而spring boot如果不引用其他中间件,只是引用了原官方文档是可以使用,但是比如引用了mq 多配置中心还有其他组件,各种组件协调可能会引发冲突会失效配置。虽然代码没有报错,但是在日志提示中也是可以看到有一些warn这些虽然无关紧要,但是一但不细心真的就错过解决问题的核心点。

参考文章:

https://www.cnblogs.com/wuzhenzhao/p/11385079.html

https://docs.spring.io/spring-cloud-bus/docs/2.2.4.RELEASE/reference/html/

文章分享自微信公众号:
技术趋势

本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!

作者:逍遥壮士
原始发表时间:2022-01-08
如有侵权,请联系 cloudcommunity@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

  • ZooKeeper、Eureka、Consul 、Nacos,微服务注册中心怎么选?

    点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 |...

    芋道源码
  • 问题:tomcat启动卡顿

    上文:问题:springboot多配置中心,解决无法同步更新(nacos/consul)

    逍遥壮士
  • SpringCloud微服务架构分析

    微服务是一种架构风格,一个大型复杂软件应用应该由一个或多个微服务组成。系统中的各个微服务都可以被独立部署,每个服务仅关注于完成一件任务就行了,在所...

    全栈程序员站长
  • 主流服务注册中心横评

    谈到服务治理,就不得不小了解一下CAP理论 ,因为一般都是分布式框架,才会有服务治理的概念,而CAP理论是分布式架构中重要理论

    呆呆
  • 面试官:ZooKeeper、Eureka、Consul、Nacos各自的区别是什么?

    服务注册中心本质上是为了解耦服务提供者和服务消费者。对于任何一个微服务,原则上都应存在或者支持多个提供者,这是由微服务的分布式属性决定的。更进一步,为了支持弹性...

    业余草
  • 微服务:注册中心ZooKeeper、Eureka、Consul 、Nacos对比

    服务注册中心本质上是为了解耦服务提供者和服务消费者。对于任何一个微服务,原则上都应存在或者支持多个提供者,这是由微服务的分布式属性决定的。更进一步,为了支持弹性...

    全栈程序员站长
  • ZooKeeper、Eureka、Consul 、Nacos微服务注册中心对比

    服务注册中心本质上是为了解耦服务提供者和服务消费者。对于任何一个微服务,原则上都应存在或者支持多个提供者,这是由微服务的分布式属性决定的。更进一步,为了支持弹性...

    IT大咖说
  • 几种常见的注册中心以及区别

    客户端注册是服务自己要负责注册与注销的工作。当服务启动后注册线程向注册中心注册,当服务下线时注销自己。

    Java技术债务
  • 平滑迁移 Dubbo 服务的思考

    近日,有报道称在 HashCorp 的商业软件试用协议上发现,旗下所有商业产品禁止在中国境内使用、部署、安装,这其中就包含了 Terraform, Consul...

    kirito-moe
  • 四个方面对比微服务注册中心产品

    微服务注册中心本质上是为了解耦服务提供者和服务消费者。对于任何一个微服务,原则上都应存在或者支持多个提供者,这是由微服务的分布式属性决定的。更进一步,为了支持弹...

    二哥聊运营工具
  • 注册中心ZooKeeper,Eureka,Consul,Nacos对比

    服务注册中心本质上是为了解耦服务提供者和服务消费者。对于任何一个微服务,原则上都应存在或者支持多个提供者,这是由微服务的分布式属性决定的。更进一步,为了支持弹性...

    常见_youmen
  • 微服务注册中心:Consul——服务注册

    微服务注册中心:Consul——概念与基础操作介绍了consul的安装和基本操作,本篇开始在consul上进行服务注册与发现,语言使用Java,框架使用Spri...

    程序员架构进阶
  • 微服务注册中心:Consul——服务注册

    微服务注册中心:Consul——概念与基础操作介绍了 consul 的安装和基本操作,本篇开始在 consul 上进行服务注册与发现,语言使用 Java,框架使...

    程序员架构进阶
  • 腾讯云微服务引擎 TSE 产品动态

    8月动态 云原生网关 【商业化】Kong网关正式商业化:自2022年8月28日起,微服务引擎 TSE 云原生网关中的 Kong 已经结束免费公测,正式开始计费。...

    腾讯云中间件团队
  • 腾讯服务注册中心演进及性能优化实践

    注册中心作为微服务架构的核心,承担服务调用过程中的服务注册与寻址的职责。注册中心的演进是随着业务架构和需求的发展而进行演进的。腾讯当前内部服务数超百万级,日调用...

    腾讯云中间件团队
  • Nacos概念和功能介绍,与Eureka&Apollo&Zookeeper的比较

    Nacos是以服务为主要服务对象的中间件,Nacos支持所有主流的服务发现、配置和管理。

    chenchenchen
  • 基于SpringCloud的微服务架构分析,神仙框架!

    Spring Cloud是一个相对比较新的微服务框架,2016年才推出1.0的release版本. 虽然Spring Cloud时间最短, 但是相比Dubbo等...

    搜云库技术团队
  • SpringCloud 常见注册中心的比较

    springcloud是一个非常优秀的微服务框架,要管理众多的服务,就需要对这些服务进行治理,也就是我们说的服务治理,服务治理的作用就是在传统的rpc远程调用框...

    BUG弄潮儿
  • 超全!我整理一波最常用的开源项目

    发这篇文章的起因是看到知乎有个类似的问题,然后感觉高赞的回答不是很让人满意,获得这么高的点赞也是让我很迷。

    cxuan

扫码关注腾讯云开发者

领取腾讯云代金券