backendless-consul-config-provider
v2.0.2
Published
Consul Configs provider for Backendless' JS Servers
Downloads
3,462
Readme
Consul Config provider for Backendless' JS Servers
Install
npm i backendless-consul-config-provider -S
How to use
Example
const BackendlessConsul = require('backendless-consul-config-provider')
BackendlessConsul
.provide({
url : 'http://localhost:8500',
rootKey : 'config/service-name/',
extraKeys: {
key1: '{version}/path/to/value1',
foo: {
bar: '{version}/path/to/value2'
},
},
version : '5.0.1',
})
.then(consulConfig => console.log('Consul Config:', consulConfig))
Options
url:
It's Consul Server URL
rootKey:
It's path to Service's Config, will be loaded the whole tree
For example we provide config/some-service
as rootKey
and there is the next structure:
Consul stricture:
5_0_1
|- config
|- some-service
|- key1 = value1
|- key2
|- key3 = value3
|- key4
|- key5 = value5
As result we will have an object:
{
key1: value1,
key2: {
key3: value3,
key4: {
key5: value5
}
}
}
extraKeys:
It's map of shared Config which can be placed by any keys
For example we have some shared config which used in Service-A and Service-B, the option helps us to get it
You can also use {version}
in path to shared value, before retrieve it will be replaced by passed version
value
Consul stricture:
global
|- some-config
|- key1 = value1
|- key2
|- key3 = value3
5_0_1
|- config
|- key4 = value4
|- key5
|- key6 = value6
|- key7 = value7
Extra Keys Map
{
prop1: "global/some-config/key1",
prop2: {
prop3: "global/some-config/key2/key3",
prop4: {
prop5: "{version}/config/key4",
prop6: "{version}/config/key5/key6",
prop7: "{version}/config/key5/key7",
}
}
}
As result we will have an object:
{
prop1: value1,
prop2: {
prop3: value3,
prop4: {
prop5: value4,
prop6: value6,
prop7: value7,
}
}
}
It can be stored in json
file for most flexible, for ex:
//consul.json
{
"apiHost": "{version}/config/server/host",
"apiPort": "{version}/config/server/port",
"notification": {
"server": "{version}/config/notification/smtpServer",
"port": "{version}/config/notification/smtpPort",
"errorRecipient": "{version}/config/notification/emails"
},
"redis": {
"cache": {
"host": "{version}/config/redis/cache/host",
"port": "{version}/config/redis/cache/port",
"password": "{version}/config/redis/cache/password"
}
}
}
const BackendlessConsul = require('backendless-consul-config-provider')
BackendlessConsul
.provide({
...
extraKeys: require('./consul.json')
})
version:
It's version of Service's Code, the config version must be the same.
The package will load current config version in Consul by key global/version/product
and if there is wrong version it will wait a few seconds and retry again.
Once both Config and Code versions are equal the package get start retrieving config
The best way to keep the option up-to-date it's pass there version from package.json
, like this:
const BackendlessConsul = require('backendless-consul-config-provider')
BackendlessConsul
.provide({
...
version: require('./package.json').version
})