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

如何实现监听配置变化了? #14

Open
shen270820227 opened this issue Feb 12, 2019 · 19 comments
Open

如何实现监听配置变化了? #14

shen270820227 opened this issue Feb 12, 2019 · 19 comments

Comments

@shen270820227
Copy link

No description provided.

@tbchj
Copy link

tbchj commented Mar 13, 2019

是啊,现在只能重启获取新的配置值,无法动态获取?怎么弄?求解

@zhukangfeng
Copy link

client = ApolloClient('test-app', config_server_url='http://ip:port', timeout=120)
client.start()

允许 start() 之后就可以自动动态获取了

@luojieio
Copy link

luojieio commented Jan 9, 2020

如何获取动态配置呢?
client=apollo_client.ApolloClient(app_id='appid', cluster='guangzhou',config_server_url='http://8.8.8.8:8080', timeout=120)
client.start()
vv=client.get_value('keyname')
print(vv)

@zhukangfeng
Copy link

如何获取动态配置呢?
client=apollo_client.ApolloClient(app_id='appid', cluster='guangzhou',config_server_url='http://8.8.8.8:8080', timeout=120)
client.start()
vv=client.get_value('keyname')
print(vv)

自动获取的,配置中心修改后,你再次调用 client.get_value('kename');就会获取到新的数据。

@luojieio
Copy link

luojieio commented Jan 9, 2020

如何获取动态配置呢?
client=apollo_client.ApolloClient(app_id='appid', cluster='guangzhou',config_server_url='http://8.8.8.8:8080', timeout=120)
client.start()
vv=client.get_value('keyname')
print(vv)

自动获取的,配置中心修改后,你再次调用 client.get_value('kename');就会获取到新的数据。

那不就是等于再手动执行一次吗?那这个监听有什么意义?

@zhukangfeng
Copy link

会自动更新到你本地缓存。一个变量你赋值后,肯定不会变得,你用的地方需要使用 clien.get_value('key')这样的方式来使用

@luojieio
Copy link

luojieio commented Jan 9, 2020

会自动更新到你本地缓存。一个变量你赋值后,肯定不会变得,你用的地方需要使用 clien.get_value('key')这样的方式来使用

本地缓存在哪?意思是说我还得再写一个监听缓存?当缓存变化时,获取缓存的值?我只是想测试一下用print()打印出来而已

@zhukangfeng
Copy link

本地缓存在内存里面。如果只是为了测试,你可以在python console上来测试,在修改配置前后分别调用 client.get_value('key')

@luojieio
Copy link

luojieio commented Jan 9, 2020

本地缓存在内存里面。如果只是为了测试,你可以在python console上来测试,在修改配置前后分别调用 client.get_value('key')

我只是想知道到底是我理解错误了还是怎样?它这个“同步配置”的功能体现在哪?比如我在apollo更新了配置,难道我还得跑在服务器上再去调用一下,那怎么称得上是自动呢?

@zhukangfeng
Copy link

程序运行的时候可以实时获取最新的配置信息,不就是自动同步配置信息了。可能理解上有差异。

@luojieio
Copy link

luojieio commented Jan 9, 2020

程序运行的时候可以实时获取最新的配置信息,不就是自动同步配置信息了。可能理解上有差异。

我的理解是,这个客户端起了一个监听,当apollo的配置变化时,按照apollo的机制,客户端会去拉配置到本地服务器,然后更新配置信息,现在这个更新动作我是直接print()打印出来以验证它是否有实时更新配置,我是这么理解的。但现在的情况是,我在apollo更新了配置后,没有print出新的内容,我需要重启这个客户端,它就能打印出新的配置内容,现在的情况就是我需要手动重启,或者像您所说,我是否要自己再多写一个监控什么状态变化,然后重启这个客户端来获取新配置信息打印出来,那这样的话,我还不如直接调用接口还方便呢?这个客户端的优势体现在哪?

@zhukangfeng
Copy link

这个客户端只会实时更新自己的内存数据,你要print,那你就得改监听那一部分的代码。而且是有logger记录是否更新。

@zhukangfeng
Copy link

优势就是,你觉得从内存读取数据耗时少,还是通过http直接请求耗时少呢。

@luojieio
Copy link

luojieio commented Jan 9, 2020

优势就是,你觉得从内存读取数据耗时少,还是通过http直接请求耗时少呢。

我还是明天把源码看看先吧,感觉跟预期不一致,也可能是README中写的自动跟我理解中的自动有差异

@xuanyuanaosheng
Copy link

xuanyuanaosheng commented May 6, 2020

@zhukangfeng 可能是演示的demo代码不合理,@luojieio 想看到的是当在apollo中发布新的配置后,能在客户端实时反映出配置的变更,不管是发布还是回滚,都能在客户端实时反映变动,而不是还得重新启动客户端

@jk123vip
Copy link

jk123vip commented Sep 7, 2020

优势就是,你觉得从内存读取数据耗时少,还是通过http直接请求耗时少呢。

我还是明天把源码看看先吧,感觉跟预期不一致,也可能是README中写的自动跟我理解中的自动有差异

请问下你有解决办法了吗?我也碰到跟你一样的问题,以为在配置中心修改配置后客户端服务里的配置就自动更新了,但实际上他不会自动拉取最新配置,必须重启服务才能获取到最新配置,这就很尴尬,因为跟修改本地配置再重启服务没啥区别了,那配置中心的意义在哪里...

@evilest-tentacle
Copy link

你们需要的是,变动配置后,apollo服务端会主动推送一个请求来更新配置?

@DontStopWin
Copy link

其实客户端是支持热更新的,但如果把配置保存在一个变量里,变量值不会每次自动更新,所以导致无法获取最新的配置。
我的解决方案是:不需要变更的配置,声明一个变量直接引用;需要变更的配置,声明一个方法,每次重新获取值,这个值其实是apollo_client已经缓存好的,但需要重新获取才可以

port = int(apollo_client.get_value('server.port', namespace='application', default_val='8080'))
def feature_switch():
    return int(apollo_client.get_value('feature.switch', namespace='application', default_val='0'))

@chunlaiqingke
Copy link

https://github.com/chunlaiqingke/apyllo

我来做维护,新增了监听

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

9 participants