vlambda博客
学习文章列表

最近使用Nacos的一些问题


Nacos是什么这里就不做过多介绍了,可以看看我之前的文章:



最近一个新的产品在使用Nacos做注册中心和配置中心,在使用的过程中也发生了一些小问题,在此记录下。

 

使用版本:

 

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

配置不刷新

比如我们在启动类上通过@NacosPropertySource指定了dataId,然后也配置了自动刷新,配置如下:

 

 
@NacosPropertySource(dataId = "application", autoRefreshed = true, type = ConfigType.YAML)

在具体使用的时候也没太去注意,直接就用了@NacosValue去获取对应的配置内容。刚开始没注意到说在后台改了配置,应用中居然没生效,后面是因为需要修改一个配置内容,发现改了之后没效果,才发现这个问题。

 

解决也非常简单,在@NacosValue中也将autoRefreshed设置为true就可以了,默认值是false。也就是说@NacosPropertySource和@NacosValue中都要配置才行。

 

我个人感觉这个不是很方便,大部分人都会认为@NacosPropertySource设置了应该就是这个对应的dataId里面的都可以自动刷新,最重要的是自动刷新是配置中心最基本的功能,我没搞明白为什么默认要关闭,直接默认开启多友好。

 

还有就是推荐大家都用@Value的方式进行配置的注入,这样做的好处在于当配置中心切换成其他的,比如Apollo的时候,不用改任何代码,如果用的是@NacosValue的话,那么就得改代码了。

 

但是@Value的弊端在Spring Boot中目前是无法动态更新的,只能依赖@RefreshScope才可以,但@RefreshScope这玩意是Spring Cloud中的,如果你没用Spring Cloud就尴尬了。。。

 

不知道有没有其他方式能实现,但在Apollo中@Value是支持动态刷新的,点赞点赞。


日志狂输出

由于Nacos naming模块中输出了很多info级别的日志,刚好项目中也设置了info级别,这个时候就会疯狂输出下面的日志,一天下来99%的日志都是无用的,浪费磁盘....

com.alibaba.nacos.client.naming -227843770 [com.alibaba.nacos.client.
naming.updater] INFO  ....

 

在Nacos的文档中有提到了日志级别的调整,如下图:

 

             

 

如果你用的log4j的换,自己将对应的配置级别调高就行,比如:

 

 
<logger name="com.alibaba.nacos.client.naming" additivity="false"> <level value="warn"/> <appender-ref ref="FileAppender" /> <appender-ref ref="ConsoleAppender" /></logger>

以上两个问题并不是功能有问题,而是在刚开始使用的过程中,由于不是很熟悉,会出现的问题。