Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

apllo 多id注册,配置文件的实现 #100

Open
TerryLam2010 opened this issue Feb 17, 2025 · 7 comments
Open

apllo 多id注册,配置文件的实现 #100

TerryLam2010 opened this issue Feb 17, 2025 · 7 comments

Comments

@TerryLam2010
Copy link
Contributor

上次增加了多appId的拉取,本次做一些收尾和增强
(1)多appId的注册信息,只有在注解形式上,增加读取application.properties 进行多 appId+namespace的注册
(2)增加了多个appId的拉取后,多更多数据的拉取到本地缓存和缓存文件当中,可以实现一个过滤器,当某appId+namespace实现了这个过滤,只拉取部分声明的配置项
(3)实现了多appId的拉取,但是注解方式设置值没有实现按appId+namespace进行分组获取值,会导致如果出现不同命名空间,存在相同key,只能获取到第一优先级的值。

@nobodyiam
Copy link
Member

(2)增加了多个appId的拉取后,多更多数据的拉取到本地缓存和缓存文件当中,可以实现一个过滤器,当某appId+namespace实现了这个过滤,只拉取部分声明的配置项

这个是指增加过滤配置,避免某些 key 注入到 spring context?

(3)实现了多appId的拉取,但是注解方式设置值没有实现按appId+namespace进行分组获取值,会导致如果出现不同命名空间,存在相同key,只能获取到第一优先级的值。

这个是指哪些注解方式?

@TerryLam2010
Copy link
Contributor Author

TerryLam2010 commented Feb 18, 2025

这个是指增加过滤配置,避免某些 key 注入到 spring context?

是的。不会放进缓存文件和Config类里面。例如appIdB.namespaceB 里面有100个key,但是我只需要其中10个,不希望全部写进应用,一方面增加缓存文件的大小,和占用内存。

这个是指哪些注解方式?

@ApolloJsonValue 注解,上次讨论过这个不做修改,所以上次这个注解并未加上namespace字段,会导致没办法根据appId+namespace +key精确取值。(这个由于原实现是通过springProperty拿的,没得区分appId+namespace,我方案还没定好)
@ApolloConfig和@ApolloConfigChangeListener 已经支持appId+namespace的了

@nobodyiam
Copy link
Member

这个是指增加过滤配置,避免某些 key 注入到 spring context?

是的。不会放进缓存文件和Config类里面。例如appIdB.namespaceB 里面有100个key,但是我只需要其中10个,不希望全部写进应用,一方面增加缓存文件的大小,和占用内存。

这个使用场景是怎样的?是提供一个 SPI 让用户自己实现过滤吗?

@TerryLam2010
Copy link
Contributor Author

这个是指增加过滤配置,避免某些 key 注入到 spring context?

是的。不会放进缓存文件和Config类里面。例如appIdB.namespaceB 里面有100个key,但是我只需要其中10个,不希望全部写进应用,一方面增加缓存文件的大小,和占用内存。

这个使用场景是怎样的?是提供一个 SPI 让用户自己实现过滤吗?

使用场景:实现了多appid后随着拉取namespace的数量增加,我们对于其他appId的配置拉取并不是100%使用,这会导致空间浪费。但如果都是普通配置倒还好,因为有些人会把apollo当成业务配置,填一个超大的文本,这就很恶心了。又不用这个超大文本,但是这个namespace下又有我需要的配置作为共用。
是的,提供一个SPI让用户自己觉得哪个特殊的appId+namespace下需要哪些key,没声明的不做过滤。

@TerryLam2010
Copy link
Contributor Author

Jason, 第一点就没什么疑问了。第二、三点你觉得需要做吗?

@nobodyiam
Copy link
Member

1, 3 比较明确
2 的话通过 spi 的方式可以实现,带来的好处是内存节省,不过也会带来理解的困扰,例如开发者 A 写了 spi 过滤,开发者 B 不清楚有这个过滤,发现页面上有配置,但是程序中始终读不到

@TerryLam2010
Copy link
Contributor Author

我先把1、3做了,第二点另外提个分支做,到时看看社区的同学怎么看

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants