Package Exports
- @hapiness/consul
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@hapiness/consul) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
Consul Module
Consul
module for the Hapiness framework.
To get started with consul, you can begin with having a look at the consul official documentation
Table of contents
- Using your module inside Hapiness application
- Using
Consul
inside your hapiness application - Contributing
- Maintainers
- License
Using your module inside Hapiness application
yarn
or npm
it in your package.json
$ npm install --save @hapiness/core @hapiness/consul rxjs
or
$ yarn add @hapiness/core @hapiness/consul rxjs
"dependencies": {
"@hapiness/consul": "^1.0.0",
"@hapiness/core": "^1.5.1",
"rxjs": "^5.5.7",
//...
}
//...
Using Consul
inside your hapiness application
Import the module
You need to include ConsulModule
in the imports
section of your module definition.
@HapinessModule(
{
version: '1.0.0',
declarations: [/* your declarations */],
providers: [/* your providers */],
exports: [/* your exports */],
imports: [ConsulModule /* other modules */]
}
)
export class MyModule { /* ... */ }
Bootstrap the extension
You need to inject the extension in bootstrap using setConfig to instantiate the module.
The config properties allowed for the extensions are defined like this:
export interface HapinessConsulClientOptions {
scheme?: string;
host?: string;
port?: string;
defaults?: {
consistent?: boolean;
dc?: string;
stale?: boolean;
token?: string;
wait?: string;
wan?: boolean;
ctx?: NodeJS.EventEmitter;
timeout?: number;
};
ca?: string;
baseUrl?: string;
}
Then just do like this:
Hapiness
.bootstrap(
MyModule,
[
ConsulExt.setConfig({
/* Put your config here */
})
])
.catch(err => done(err));
Use the exposed service
This library is in fact a wrapper of the famous consul node library but wrap all its functions to returns rxjs Observable
You can see the doc by clicking here
We provide a wrapper called ConsulService
exposing a client
getter that will allow you to access the consul client.
class FooProvider {
constructor(private _consul: ConsulService) {}
bar(): Observable<string> {
// Getting a key from the KV client of consul
return this._consul.client.kv.get('hello');
}
acquireLock(): void {
// Create a consul lock
const lock = this._consul.client.lock({ key: 'test' });
// Listen to lock events
lock.on('acquire', () => {
console.log('lock acquired'));
lock.release();
});
lock.on('release', () => console.log('lock released'));
lock.on('error', () => console.log('lock error:', err));
lock.on('end', (err) => console.log('lock released or there was a permanent failure'));
// Acquire the lock
lock.acquire();
}
}
Contributing
To set up your development environment:
- clone the repo to your workspace,
- in the shell
cd
to the main folder, - hit
npm or yarn install
, - run
npm or yarn run test
.- It will lint the code and execute all tests.
- The test coverage report can be viewed from
./coverage/lcov-report/index.html
.
Maintainers
Julien Fauville | Antoine Gomez | Sébastien Ritz | Nicolas Jessel |
License
Copyright (c) 2018 Hapiness Licensed under the MIT license.