文章导航:
如果阿里自谦中国技术界第二,估计没人敢称第一,阿里在开源上的贡献有目共睹,有自成生态的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