内容简介:随着业务使用的持续迭代,可以如果图片无法打开,请到 github
随着业务使用的持续迭代,可以 watch 持续关注哦, 点击 star 是对我们最大的支持与鼓励。
Introduction
如果图片无法打开,请到 github ctrip-apollo-client 中查看
中心配置 mysql.host:127.0.0.1 客户端会自动转化为Json { mysql:{ host: 127.0.0.1 } } } 方便处理。
apollo 服务端测试环境:
- host: http://106.54.227.205/
- 账号:
apollo - 密码:
admin
Features
- 配置热更新
- 缓存配置到本地
- 灰度发布
- 支持 TypeScript
Install
npm i @lvgithub/ctrip-apollo-client --save
Usage
- 本demo 已经在测试环境创建项目 apolloclient,大家可以直接在本地测试;
- 在配置中心修改user.name值后,无需重启,再次请求,会自动取到最新的值;
- 如想体验建议下载demo运行 源码 (TypeScript);
- JS版本demo 源码
import { CtripApplloClient, value, hotValue } from 'ctrip-apollo-client';
import Koa from 'koa';
const apollo = new CtripApplloClient({
configServerUrl: 'http://106.54.227.205:8080',
appId: 'apolloclient',
accessKey: '<your Apollo AccessKey>',
configPath: './config/apolloConfig.json',
namespaceList: ['application', 'development.qa']
});
const app = new Koa();
const run = async () => {
// 初始化配置
await apollo.init();
// 获取的配置,不会热更新
const port = apollo.getValue('app.port:3000');
// 获取配置,支持热更新,需要通过 appName.value 获取最终值
const appName = hotValue('app.name:apollo-demo');
class User {
// 通过装饰器注入,支持热更新
// 只能注入类的属性
@value("user.name:liuwei")
public name: string
}
const user = new User();
app.use(async (ctx, next) => {
ctx.body = {
appName: appName.value,
userName: user.name
}
await next();
})
app.listen(port);
console.log('listening on port:', port);
console.info(`curl --location --request GET \'http://localhost:${port}\' `);
}
run();
API
new ApolloClient(options)构造函数
-
returns:
apolloClient -
options
- configServerUrl
stringrequiredApollo配置服务的地址 - appId
stringrequired应用的appId - accessKey
stringApollo AccessKey - clusterName
string集群名,默认值:default - namespaceList
arrayNamespace的名字,默认值:[application] - configPath
string本地配置文件路径 默认值./config/apolloConfig.json - logger
object日志类 必须实现logger.info(),logger.error()两个方法
- configServerUrl
init(timeoutMs)初始化配置中心,拉取远端配置到端上,并且缓存一份到文件中,同时开启 HTTP Long Polling 来实时监控配置,如果拉取超过 timeoutMs ,或者发生异常,则读取本地缓存的配置文件。如果本地没有缓存配置文件,抛出异常。
- return: Promise
- timeoutMs 超时时间
getConfigs()获取最新的配置文件
- returns:
object
const config = apollo.getConfigs();
getValue (namespace = 'application')获取具体的配置字段
- returns:
string - namespace 默认值:
application - field
stringeg:mysql.port:3306分号前面key,如果未配置 3306 作为默认值
class User {
get userName () {
return apollo.getValue({ field: 'user.name:liuwei' });
}
}
hotValue (namespace = 'application')获取具体的配置字段,封装 getter (热更新)
- returns:
{value} - namespace 默认值:
application - field
string属性位置 eg:mysql.port:3306分号前面key,如果未配置 3306 作为默认值
const userName = apollo.hotValue({ field: 'user.name:liuwei' });
console.log(userName.value);
withValue(target, key, field, namespace)
- returns:
void - target 目标对象
- key 需要注入对象的属性
- field
string属性位置 eg:mysql.port:3306分号前面key,如果未配置 3306 作为默认值 - namespace
string默认值:application
class User {
constructor () {
withValue(this, 'userId', { field: 'user.id:10071' });
}
}
// userId 属性会跟随配置更新
new User().userId
onChange (callback(object))配置变更回调通知
- returns:
void
value(field, namespace)注入器,只能注入类的属性
string string
import { value } from 'ctrip-apollo-client';
class User {
@value("user.name:liuwei")
public name: string
}
Benchmark
一次性注入[localValue] x 736,896,802 ops/sec ±1.49% (82 runs sampled)
支持热更新[hotValue] x 2,021,310 ops/sec ±1.28% (87 runs sampled)
热更新默认值[hotValue default] x 1,581,645 ops/sec ±0.89% (87 runs sampled)
装饰器注入[decorator] x 2,161,312 ops/sec ±0.96% (87 runs sampled)
原生访问[dot] x 704,644,395 ops/sec ±1.45% (82 runs sampled)
Fastest is [localValue]
License
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 支付宝客户端架构解析:Android 容器化框架初探
- 支付宝客户端架构解析:iOS 容器化框架初探
- 携程配置中心框架 Apollo Node.Js 版本客户端
- Aurelia FrameWork 1.2.0 发布,JavaScript 客户端框架
- 对于Steam的聊天客户端React框架的XSS
- TEA:一款基于TAS框架的SSH客户端蠕虫
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Effective C# 中文版
Bill Wagner / 李建忠 / 人民邮电出版社 / 2007-5 / 49.00元
本书围绕一些关于C#和.NET的重要主题,包括C#语言元素、.NET资源管理、使用C#表达设计、创建二进制组件和使用框架等,讲述了最常见的50个问题的解决方案,为程序员提供了改善C#和.NET程序的方法。本书通过将每个条款构建在之前的条款之上,并合理地利用之前的条款,来让读者最大限度地学习书中的内容,为其在不同情况下使用最佳构造提供指导。 本书适合各层次的C#程序员阅读,同时可以推荐给高校教......一起来看看 《Effective C# 中文版》 这本书的介绍吧!