egg-apollo插件基于ctrip-apollo v4.4.0,帮助你在eggjs下快速与apollo配置中心进行集成。
$ npm i @taccisum/egg-apollo --save
// {app_root}/config/plugin.js
exports.apollo = {
enable: true,
package: '@taccisum/egg-apollo',
};
// {app_root}/config/config.default.js
exports.apollo = {
enabled: true,
timeout: 3000, // 等待超时时间
namespaces: [ 'application' ]
// 其它配置沿用自ctrip-apollo,更多请参考 https://github.com/kaelzhang/ctrip-apollo
appId: 'foo-service', // your application id in apollo
host: 'http://localhost:8070', // apollo config service地址
};
egg-apollo
在启动后会自动从apollo拉取配置并合并到eggjs本地配置中,一般不需要做额外的操作。点击这里查看合并规则
如果确实有需要,你也可以通过以下方式获取到apollo的客户端
const client = app.apollo;
// do something with apollo client
每个应用只能指定唯一的appId
及cluster
,但可以指定多个namespace,多个namespace的配置会按照一定规则合并后再与本地配置合并。
具体规则如下:
namespaces通过config.apollo.namespaces | array
配置,多个namesapce优先级从右到左降低,例如指定了3个namespace
exports.apollo = {
namespaces: [ 'application', 'tac.foo1', 'tac.foo2' ]
}
其中
application
a=a
b=b
c.d=cd
tac.foo1
a=a1
b=b1
tac.foo2
b=b2
则配置会按照tac.foo2
-> tac.foo1
-> application
的顺序合并,合并后的结果将是
a=a1
b=b2
c.d=cd
最终被解析为以下json对象与本地config合并
{
"a": "a1",
"b": "b2",
"c": {
"d": "cd"
}
}
empty now.