Nacos2作为Dubbo3的配置中心踩坑总结

发布时间 2023-07-23 23:18:04作者: nuccch

本文阐述问题所使用的组件版本分别是,Dubbo:3.2.4,Nacos服务端:2.2.3,Nacos客户端:2.2.4。

Dubbo3的官方文档中,关于如何使用Nacos作为配置中心的详细介绍参考:Nacos
但非常沮丧的是我参照文档的描述,并没有成功将Nacos2配置成为Dubbo3项目的配置中心。

期间也看到有人在github上提出相关的问题,但似乎暂时还没有解决办法,详见:springboot+nacos+dubbo无法正常从nacos读取dubbo初始化配置。最后是参考了Nacos + Dubbo + SpringBoot 集成 注册中心 配置中心才配置成功的。

前置条件:根据Nacos官方手册部署好Nacos环境。

第一步:添加nacos-config-spring-boot-starter依赖,需要使用到其中的注解和配置。

<dependency>
    <groupId>com.alibaba.boot</groupId>
    <artifactId>nacos-config-spring-boot-starter</artifactId>
    <version>0.2.12</version>
</dependency>

第二步:在项目配置文件中添加Nacos作为配置中心的参数。

nacos:
  config:
    bootstrap:
      enable: true # 必须设置为true,否则启动报错
    auto-refresh: true # 必须设置为true,自动刷新变量值才能生效
    server-addr: 192.168.2.24:8848 # nacos服务器地址
    data-id: consumer.yaml # 在nacos上的配置参数dataId
    type: yaml # 在nacos上的配置参数格式,必须与data-id参数格式保持一致
    group: DEFAULT_GROUP # 分组名称,如果使用默认值DEFAULT_GROUP,可以不用明确配置

第三步:在项目中使用注解@NacosValue读取nacos上的配置参数。
假设nacos上配置参数data-id为“consumer.yaml”,内容如下:

user:
  id: 1
  nickName: lisi
  age: 23

则可以在Java代码中使用注解@NacosValue读取相应的配置参数,如果希望参数值动态刷新,必须设置autoRefreshed为true。

@NacosValue(value = "${user.id}", autoRefreshed = true)
private String userId;

@NacosValue(value = "${user.nickName}", autoRefreshed = true)
private String userNickName;

最后验证:只要在nacos控制台界面上修改了对应的配置参数之后,在nacos客户端就能及时刷新到最新值。