微服务-Nacos动态配置中心

前言

回想之前的项目,尤其是项目分多模块的时候,一般就会有一个公共包大多是相关工具类,因为比较独立使得其他模块调用方便,现在出来个需求为工具类参数进行动态控制,比如Redis工具类动态设定过期时间,除了这类在项目运行过程中需要动态修改,还有一类是在项目启动时候需要动态加载,一个常见的例子就是在项目启动时候读取数据源信息…还要很多尤其是分布式的大环境下,使用微服务的公共配置中心组件来进行配置和管理。

配置选型

微服务中配置中心有很多,但是 Spring Cloud Config 业界标配是以下三个组件:

Spring Cloud ConfigSpring Cloud ConsulCloud Alibaba Nacos
组织/活跃度Spring社区/活跃Consul/活跃Alibaba/活跃
是否开源开源开源
实现方式git开源开源
性能开源开源开源
刷新频率开源开源开源
易用程度开源开源开源
支持图形界面开源开源开源
维护成本开源开源开源
容灾机制开源开源开源
(欢迎补充)开源开源开源

前面两种其实Spring社区推的一套,由于

Spring Cloud ConfigSpring开源社区的默认集成方式,由于下面的组件闭源的闭源像Eureka,不活跃的不活跃,渐渐别Alibaba的服务组件所取代,成为新的主流微服务框架Spring-Cloud-Alibaba,不仅仅活跃度高并且阿里还提供了很多丰富的云产品像ACM可以与云原生应用无缝集成,非常方便。
因为所有微服务系列基于Spring-Cloud-Alibaba,所以这里选用Nacos

下载安装

Nacos和其他服务比如Redis一样,需要安装Nacos Server提供服务,然后再使用客户端进行连接.

第一步:

去Github的进行Nacos Server 下载 ,这里下载发布版1.2.1

同样可以去Github下载Nacos源码,通过Maven进行编译打包成jar,然后运行即可,Nacos其实就是Springboot项目基于Tomcat包装起来的。

第二步:

启动Nacos服务,查看bin目录可以知道不通系统平台均有启动停止脚本,然后进行启动即可。

$ ls -lt bin/
-rwxr-xr-x 1 terry 1049089 4730 May 16 14:12 startup.sh
-rw-r--r-- 1 terry 1049089  954 May 15 18:35 shutdown.cmd
-rwxr-xr-x 1 terry 1049089  949 May 15 18:35 shutdown.sh
-rw-r--r-- 1 terry 1049089 2836 May 15 18:35 startup.cmd
$ bin/startup.sh

         ,--.
       ,--.'|
   ,--,:  : |                                           Nacos 1.2.1
,`--.'`|  ' :                       ,---.               Running in stand alone mode, All function modules
|   :  :  | |                      '   ,'\   .--.--.    Port: 8848
:   |   \ | :  ,--.--.     ,---.  /   /   | /  /    '   Pid: 25516
|   : '  '; | /       \   /     \.   ; ,. :|  :  /`./   Console: http://192.168.3.35:8848/nacos/index.html
'   ' ;.    ;.--.  .-. | /    / ''   | |: :|  :  ;_
|   | | \   | \__\/: . ..    ' / '   | .; : \  \    `.      https://nacos.io
'   : |  ; .' ," .--.; |'   ; :__|   :    |  `----.   \
|   | '`--'  /  /  ,.  |'   | '.'|\   \  /  /  /`--'  /
'   : |     ;  :   .'   \   :    : `----'  '--'.     /
;   |.'     |  ,     .-./\   \  /            `--'---'
'---'        `--`---'     `----'
...
2020-06-05 17:08:07,895 INFO Nacos started successfully in stand alone mode.
2020-06-05 17:08:08,319 INFO Initializing Servlet 'dispatcherServlet'
2020-06-05 17:08:08,349 INFO Completed initialization in 28 ms

此时Nacos已经启动成功默认单例模式,默认端口:8848

基本使用

添加依赖

Maven项目的pom文件中添加Nacos客户端依赖包

<dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

配置Nacos

  1. 在微服务配置文件bootstrap.properties中添加Nacos Server服务地址

    spring.application.name=nacos-config-example
    spring.cloud.nacos.config.server-addr=127.0.0.1:8848
    
  2. 动态监听
    由于监需要启动一个线程,所以在Spring中实现接口ApplicationRunnerrun方法,监听配置Nacos Serve中的文件nacos-config-example.properties

    	@Autowired
    	private NacosConfigManager nacosConfigManager;
    	@Override
    	public void run(ApplicationArguments args) throws Exception {
    		System.out.println(
    				String.format("Initial username=%s, userAge=%d", userName, userAge));
    
    		nacosConfigManager.getConfigService().addListener(
    				"nacos-config-example.properties", "DEFAULT_GROUP", new Listener() {
    					@Override
    					public void receiveConfigInfo(String configInfo) {
    						Properties properties = new Properties();
    						try {
    							properties.load(new StringReader(configInfo));
    						}
    						catch (IOException e) {
    							e.printStackTrace();
    						}
    						System.out.println("config changed: " + properties);
    					}
    
    					@Override
    					public Executor getExecutor() {
    						return null;
    					}
    				});
    	}
    
    
  3. 动态刷新

    添加基本变量如下:

    @RestController
    @RefreshScope
    class SampleController {
    
    	@Autowired
    	UserConfig userConfig;
    
    	@Autowired
    	private NacosConfigManager nacosConfigManager;
    
    	@Value("${name}")
    	String userName;
    	@Value("${age:25}")
    	Integer age;
    
    	@RequestMapping("/user")
    	public String simple() {
    		return "Hello Nacos Config!" + "Hello " + userName + " " + age + " [UserConfig]: "
    				+ userConfig + "!" + nacosConfigManager.getConfigService();
    	}
    }
    

    name,age是需要动态改变的变量,注意在类SampleController上有个注解@RefreshScope,动态刷新配置。

测试

打开终端:

$ curl http://localhost:18084/user
Hello Nacos Config!Hello null 18
# 修改name,age
$ curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos-config-example.properties&group=DEFAULT_GROUP&content=user.id=1%0Auser.name=terry%0Auser.age=20"
true                       
$ curl http://localhost:18084/user
Hello Nacos Config!Hello terry 20

通过Nacos的API调用,即可实现动态配置,除此以外它也提供了界面来进行管理,这里就不多说了。

后记

所以微服务,动态配置和统一管理配置是一个必须要解决的问题,因为随着项目的横向纵向扩展,项目数也会越来越多,随之而来得就是各个服务的配置统一配置和管理,就像一个工厂生产工件的型号,都有一个统一管理的地方,这样才能更灵活,更轻松地构建,交付和管理分布式环境下微服务平台。
Nacos不一定非的是微服务项目才能用的,普通的项目比如:SSHSSM,甚至Servlet都是可以用来做动态配置中心的,完全可以独立出来。
在微服务中除了做配置中心,还能做注册中心等等,其实自该组件从阿里巴巴诞生而来,一直受到社区的强烈关注,在一定程度上成为了微服务的标准。

参考文章

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值