node apollo client for Ctrip Apollo
Features:
- implement all APIs described in official documentation
- high availability by caching configs in local files which simulate JAVA SDK.
- written in TypeScript and typing support
- naturally async await function calling, no event or callback mixed-in.
local configs object
\-+= local cached config files
\-+= fetch from Apollo DB at once
\-+= fetch from Apollo cache periodically (default to 5 minutes)
\-+= subscribe notification and fetch from Apollo DB if release tag changed
\-+= update local configs by API: refreshConfigs
scene | impact | configs source |
---|---|---|
failed to connect apollo at begining | x | load local configs directly |
failed to connect apollo | x | load cached apollo configs |
failed to connect apollo and wish to update configs | x | update cached configs temporarily |
failed to receive notifications | x | fetch configs periodically from apollo |
failed to fetch from apollo cache | x | subscribe notification and fetch from DB |
install package from npm
npm install node-apollo-client
const Apollo = require('node-apollo-client')
// Instantiate Apollo
const apollo = new Apollo({
configServerUrl: 'your-config-server-url',
appId: 'your-app-id',
cluster: 'default', // [optional] default to `default`
namespaces: ['application'], // default to `['application']`, this is the namespaces that you want to use or maintain.
initialConfigs: {
application: { // this is default namespace name
foo: 'Mars',
bar: 'Jupiter'
},
}, // [optional]
listenOnNotification: true, // [optional] default to true
fetchCacheInterval: 5 * 60e3, // [optional] default to 5 minutes. can be customize but 30s or shorter time are not acceptable.
cachedConfigFilePath: '/tmp' // [optional] cached configs path, default to system's tmp directory, for linux it's basically '/tmp'.
});
// fetch single config
await apollo.fetchConfig({ key: 'foo' });
// return 'Mars'
// fetch multiple configs
await apollo.fetchConfigs({ keys: [ 'foo', 'bar' ] });
// return { foo: 'Mars', bar: 'Jupiter' }
// refresh local configs (merely used when Apollo is unavailable)
apollo.refreshConfigs({ configs: { foo: 'Mercury' } });
// check out key `foo`
await apollo.fetchConfig({ key: 'foo' });
// return { foo: 'Mercury' }
MIT