apollo-sdk-config
apollo-sdk-config copied to clipboard
这个每次都是http调用,并发高的时候还是得用client啊
其实正常业务使用,基本不会采用直连模式的。
常规做法是启动一个常驻的cli进程负责配置更新工作,将配置缓存到服务器本地。业务端读取本地的缓存文件,进行加载配置的。
直连模式有一个比较大的风险,一旦阿波罗配置中心挂了,就会牵连到业务系统,例如配置中心无法访问,获取配置接口返回502了,这样业务系统就读取配置异常了。甚至配置中心接口请求超时了,然后业务系统也跟着请求超时了。
php的脚本是生产周期是页面级的,无法把配置持久化在内存,只能每次脚本运行时调用接口或者读取本地配置文件加载配置,有兴趣的人可以写个pecl扩展,类似鸟哥的yaf,在php-fpm启动时,通过php-fpm与阿波罗配置中心建立连接,然后维持配置更新工作,这样脚本就可以直接调用相应的类进行读取配置了。
这个库的职责定位是lib,不是client的实现。如果需要client的实现可以看看这个仓库 https://github.com/fengzhibin/apollo-sdk-clientd
这个clientd就是基于这个库实现常驻的client,这个常驻的client负责与阿波罗配置中心保持通讯,把配置通过json格式缓存到服务器目录。业务端可以通过指定的函数获取配置
@fengzhibin 我刚试了下,用clinet,configservice和client都部署在本地的话会报错
PHP Warning: Undefined property: App::$server in /home/fishwade/Projects/apollo-sdk-clientd/bin/apollo-clientd.php on line 67
Warning: Undefined property: App::$server in /home/fishwade/Projects/apollo-sdk-clientd/bin/apollo-clientd.php on line 67
【ERROR】通过curl请求时产生错误,错误信息如下:
http状态码为200,配置中心根接口的状态码应该为404,请检查阿波罗配置中心链接
并且$jsonDecodeBody['status']也为空
@fengzhibin 我刚试了下,用clinet,configservice和client都部署在本地的话会报错
PHP Warning: Undefined property: App::$server in /home/fishwade/Projects/apollo-sdk-clientd/bin/apollo-clientd.php on line 67 Warning: Undefined property: App::$server in /home/fishwade/Projects/apollo-sdk-clientd/bin/apollo-clientd.php on line 67 【ERROR】通过curl请求时产生错误,错误信息如下: http状态码为200,配置中心根接口的状态码应该为404,请检查阿波罗配置中心链接并且$jsonDecodeBody['status']也为空
配置中心根接口的请求不应该是200状态码吧。我这边测试是404状态码的。你手动curl请求看一下阿波罗配置中心是否正常