02、Dubbo实战:Nacos做配置中心

文章导航:

Dubbo学习系列之一(消费者生产者模式搭建)

如果阿里自谦中国技术界第二,估计没人敢称第一,阿里在开源上的贡献有目共睹,有自成生态的alibaba-cloud系列,今天我就使用下其一Nacos做配置中心。首先,一个好的系统,应该是“配置分离”的,系统只实现逻辑,做到上下文无关,其次,配置中心主流目前有springCloud的Config,携程的Apollo,还有就是Nacos,简单比较下,Config内部整合Git,整个配置更新过程略长,并发受限于Git,支持灰度发布;Apollo就是xiamenair的电商在用的,配置安装有点让人上头,支持集群分布式,灰度发布;Nacos是新生代选手,2018年开源,目前主版本1.0,支持集群,配置简单,灰度配置,有admin界面,还可以做注册中心,可代替ZK,Consul,Eureka,这是要一统三国的节奏么,,好了,进入正题:

目标:实现Nacos做配置中心,并读取配置内容

准备:Idea2019 / Nacos1.1.3 / ZK3.4.12 /Gradle5.4.1

步骤:

1,整体思路,用ZK做注册中心,用Nacos做配置中心,各司其职;代码架构仍然是三个模块:common,consumer,provider,具体搭建可参考我的第一篇内容:Dubbo学习系列之一(消费者生产者模式搭建)

2,配置下provider的build.gradle,我这里将依赖的下载点,配置到了本地

mavenLocal()

和aliyun,

maven{ url'http://maven.aliyun.com/nexus/content/groups/public/'}

以加快包下载速度,几个重要的依赖包,见框,缺失的提示,见上面的注释部分,都是亲自动手测出来的。

*

3、 配置类,这是核心:;

@Configurable

Marks a class as being eligible for Spring-driven configuration.

@EnableNacosConfig

Annotation for enabling Nacos Config features.

这里有个

autoRefreshed = true,groupId = "DEFAULT_GROUP"

指定该服务是否自动刷新配置,groupId是配置中心文件的属性之一,类似于Git的profile描述,


*

4、 启动类,里有这个java并发包里的“闭锁”,;

newCountDownLatch(1).await();

这个只是为了保持主程序一直wait(),不停止,其实,不加没有关系,


*

5、 来个controller的测试类:;

使用@Value直接取值,其实这只是Spring的写法,也可使用Java原生,请君探索一下吧。

*

6、 该Nacos登场了;

下载--安装---打开,http://127.0.0.1:8848/nacos,如有疑问,请君度娘,注意这个有意思的端口号,8848!世界第一高峰,可见阿里野心非常!

看这个介绍:面向云应用的服务发现与注册、配置、管理一条龙平台。

登录帐号:nacos / nacos,

*

7、 新建就是+号,;

DataID就是前面代码中的,务必注意保持一致,

@NacosPropertySource(dataId = "dubbo-config-center-nacos.properties"

Group即代码中配置的GroupId,

Content支持Json和properties格式,

*

*

8、 这里有个小知识:SampleCode中给出了读取配置文件的代码样例,我比较了一下,纯java和Spring的@Value方式,可见Spring带来的生产力!顺带解答了上面说的第5点中的问题![*][nbsp7];

*

9、 来吧,是驴是马,拉出来遛一个:;

本地cmd命令,启动Nacos,

*

这就是我想要的完美!是不是很简单,赶紧去尝试下吧。

测试一个:http://localhost:8083/config/name

*

制作后记:

1、 ZK(zookeeper)算是一款早期的产品,有它适合的场景,如集群领导节点选取,分布式锁,支持zk集群,不方便的就是只有命令行,;

2、 ZK的内容类似Linux的文件层级结构,dubbo支持zk协议,故zk也可以做dubbo的配置中心,这里使用zkCli可以看到层级结构,一个服务的配置\生成者\消费者,因服务是停止的,故这里看到的是空[].;

*
3、 代码中有修改,可以多使用gradle的Task-->build-->clean,将可能的缓存残留去除,以保证代码修改生效;
4、 本地Maven库和Gradle库不可通用,maven使用GroupID和ArtifactID组织,而gradle使用hash值做key值,;

5、 其实写文章的过程,也是个学习的过程,温故知新,;

6、 源码地址,其中的day02:;

https://github.com/xiexiaobiao/dubbo-project.git