alibaba / nacos

an easy-to-use dynamic service discovery, configuration and service management platform for building cloud native applications.
https://nacos.io
Apache License 2.0
30.02k stars 12.8k forks source link

[Feature] 通过注解将nacos源码中的配置规范化 #12460

Closed 985492783 closed 1 week ago

985492783 commented 1 month ago

前提:在社区共建的行为下,很多配置信息不太规范,并且写法种类比较多,有从properties里提取,有从其他地方提取,又或者有人支持yaml动态配置,有人不支持 改动:是否可以将所有配置规范化,将desc,defaultValue,canConfig等信息统一收集,统一处理,类似@Value注解 方案:通过注解配置,aop不依赖spring,可以基于jsr-269这一规范,静态将注解编译为代码,类似lombok,有更好的方案可以提出 举个例子:

@NacosConfig(value="nacos.naming.client.expired.time", canConfig=true, defaultValue=1000L)
private long expiredTime;

此时aop自动改写成

private long clientExpiredTime=EnvUtil.getProperty(ClientConstants.CLIENT_EXPIRED_TIME_CONFIG_KEY, Long.class,
                ClientConstants.DEFAULT_CLIENT_EXPIRED_TIME);

优点,所有的配置统一化,对用户对开发者都很友好,不需要新增代码从properties里面拿,或者忘记做成动态化配置,以及properties的key不规范

12457 用户就算看了源码也很难找到defaultValue

KomachiSion commented 1 month ago

基于aop会不会导致native化的时候比较困难? 另外基于aop是否还能保持动态?

985492783 commented 1 month ago

基于aop会不会导致native化的时候比较困难? 另外基于aop是否还能保持动态?

如果用jsr269这种预编译方案应该加一些支持反射和包的配置就行,跟lombok对齐,而且我们可以拆分只支持服务端的一些配置,客户端的配置应该比较固化了 保持动态是指从springboot读配置还是指动态修改,前者一定支持 后者可以支持,aop层支持listener,提供一些trigger,上层应用变更配置的时候触发该trigger,类似notifycenter,或者直接用notifycenter我觉得都行

KomachiSion commented 1 month ago

看看有没有其他方案, 我总觉得用这种方式的话,容易踩到坑,万一出问题不好排查