filamoon / pyapollo

Python client for Ctrip's Apollo.
Apache License 2.0
194 stars 94 forks source link

uwsgi+django项目中配置的apollo, 不能获取最新apollo数据 #19

Closed jtzgyw closed 1 year ago

jtzgyw commented 4 years ago

问题:

在uwsgi+django项目中接入apollo后发现,使用get_value获取到的数据是项目启动时cache中的数据,不能之后更新的apollo数据。

调试:

1、 在 uncached_http_get 和get_value中分别打印了cache中的值, 在apollo后台修改数据,这时,uncached_http_get 会打印出最近的cache数据, 再调用get_value,发现,cache中值是旧的数据。

2、 直接使用python manage runserver 启动项目,重复1的操作,发现,可以获取到最新的cache数据。

结论:

uwsgi启动项目使 get_vaule中的self 和 uncached_http_get 中的self并非一个对象。

不知道这个算不算bug,还是我uwsgi启的方式不对。如果有人碰到和我一样的问题并解决的朋友,请回复我一下,谢谢!

jtzgyw commented 4 years ago

找到原因了, django 使用uwsgi启动时,会有4个进程, 当apollo信息变更时,只有一个进程里的内apollo内存配置变更。 所以, 两个解决方案: 一个是django 单进程运行。 一个是apollo 配置信息由内存保存改为本地保存。

aleimu commented 3 years ago

uwsgi 运行时与python脚本执行时表现不一样,建议配置下这两个参数: enable-threads = true lazy-apps = true

这两个参数影响apollo中守护线程的运行.

doing-cr7 commented 2 years ago

求demo