https://github.com/h2non/resilient-consul
Resilient.js middleware to use Consul for service discovery and balancing
https://github.com/h2non/resilient-consul
Last synced: about 2 months ago
JSON representation
Resilient.js middleware to use Consul for service discovery and balancing
- Host: GitHub
- URL: https://github.com/h2non/resilient-consul
- Owner: h2non
- License: mit
- Created: 2015-04-29T14:23:42.000Z (about 10 years ago)
- Default Branch: master
- Last Pushed: 2016-02-09T11:46:27.000Z (over 9 years ago)
- Last Synced: 2024-10-18T11:25:35.594Z (8 months ago)
- Language: JavaScript
- Homepage:
- Size: 599 KB
- Stars: 14
- Watchers: 3
- Forks: 5
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# resilient-consul [](https://travis-ci.org/h2non/resilient-consul) [](http://resilient-http.github.io) [](http://standardjs.com)
[resilient.js](https://github.com/resilient-http/resilient.js) HTTP client
[middleware](https://github.com/resilient-http/resilient.js#middleware-layer) for [Consul](https://www.consul.io).Via this middleware you can use Consul as compatible discovery server in Resilient HTTP clients.
Works with Consul HTTP API `v1` and resilient.js `+0.3`Nameconsul
Typediscovery
Resilient+0.3
Environmentsnode.js / browsers
## Installation
### Node.js
```
npm install resilient-consul --save
```### Browser
Via Bower:
```
bower install resilient-consul --save
```Via Component:
```
component install h2non/resilient-consul
```Or loading the script directly:
```html```
## Usage
```js
var Resilient = require('resilient')
var consul = require('resilient-consul')var client = Resilient()
client.use(consul({
// App service name (required)
service: 'web',
// Service name for self discovery (optional)
discoveryService: 'consul',
// Use a custom datacenter (optional)
datacenter: 'ams2',
// Use a custom service tag (optional)
tag: '1.0',
// Consul servers pool
servers: [
'http://demo.consul.io',
'http://demo.consul.io'
],
// Use Consul's health check endpoint instead of the catalog
// to retrieve only services with passing health checks (optional)
onlyHealthy: false,
// Use a custom mapping function (optional)
mapServers: function (list) {
// here you can filter/map the services retrieved from Consul
// to a list of addresses according to custom logic (optional)
return list.map(function (svc) { return svc.ServiceAddress + '/v1' })
}
}))// Test request
client.get('/', function (err, res) {
console.log('Error:', err)
console.log('Response:', res)
})
```#### Browser usage
If you're running Resilient in the browser, you must enable CORS headers in Consul.
To do that you can define additional response HTTP headers in the Consul config file:```
"http_api_response_headers": {
"Access-Control-Allow-Origin": "*"
}
```## Options
- **service** `string` - Consul service. Required
- **servers** `array` - List of Consul servers URLs. Required
- **discoveryService** `string` - Consul discovery service for self discovery (e.g: consul)
- **datacenter** `string` - Custom datacenter to use. If not defined the default one will be used
- **tag** `string` - Use a specific tag for the service
- **onlyHealthy** `boolean` - Use Consul's health check endpoint instead of the catalog to retrieve only services with passing health checks. Default to `false`
- **protocol** `string` - Transport URI protocol. Default to `http`
- **mapServers** `function` - Custom function for creating the list of service addresses based on the Consul responseAdditionally you can pass any of the supported Resilient
[discovery options](https://github.com/resilient-http/resilient.js#discovery) via this middleware## License
MIT - Tomas Aparicio