superagent-load-balancer
v2.0.3
Published
load balancer plugin for superagent
Downloads
17,022
Maintainers
Readme
superagent-load-balancer
Load balancer plugin for superagent
Installation
$ npm install superagent-load-balancer
Examples
View the ./examples directory for working examples.
API
get
backends
the backend listname
The name of backendhost
The host of backendprotocol
The protocol, optional, default is 'http'ip
The ip of backend, optionalport
The port of backend, optionalweight
The weight of backend, it is for 'round-robin'backup
Set the backend as backup, optional
type
balance algorithm:url
,leastconn
,round-robin
,first
,url-path
, default isround-robin
const request = require('superagent');
const Balancer = require('superagent-load-balancer');
const balancer = new Balancer([
{
host: 'domain.com',
ip: '192.168.1.1',
port: 8080,
weight: 10,
},
{
host: 'domain.com',
ip: '192.168.1.2',
port: 8080,
weight: 2,
},
]);
const plugin = balancer.plugin();
request.get('/user')
.use(plugin)
.then((res) => {
console.info(res.body);
})
.catch(console.error);
startHealthCheck
options
{ping: function, interval: ms}ping
ping function, the function will return promise. If resolve, the backend is healthy. If reject, the backend is sick.ms
check intervalwindow
each check the total count of pingthreshold
each check the healthy count is bigger than threshold, the backend is healthy. Otherwise is sick
const request = require('superagent');
const Balancer = require('superagent-load-balancer');
const balancer = new Balancer([
{
host: 'domain1.com',
weight: 10,
},
{
host: 'domain2.com',
weight: 2,
},
]);
const ping = (backend) => {
const url = `http://${backend.host}/ping`;
return request.get(url).timeout(300);
};
balancer.startHealthCheck({
ping,
});
const plugin = balancer.plugin();
request.get('/user')
.use(plugin)
.then((res) => {
console.info(res.body);
}).catch(console.error);
on
Add listener function to healthy
or sick
event
const request = require('superagent');
const Balancer = require('superagent-load-balancer');
const balancer = new Balancer([
{
host: 'domain1.com',
weight: 10,
},
{
host: 'domain2.com',
weight: 2,
},
]);
const ping = (backend) => {
const url = `http://${backend.host}/ping`;
return request.get(url).timeout(300);
};
balancer.startHealthCheck({
ping,
});
balancer.on('healthy', (server) => {
console.info(server);
});
balancer.on('sick', (server) => {
console.info(server);
});
const plugin = balancer.plugin();
request.get('/user')
.use(plugin)
.then((res) => {
console.info(res.body);
}).catch(console.error);
getAvailableServers
Get the available server list. It is not disabled and backup.
const request = require('superagent');
const Balancer = require('superagent-load-balancer');
const balancer = new Balancer([
{
host: 'domain1.com',
weight: 10,
},
{
host: 'domain2.com',
weight: 2,
backup: true,
},
]);
const ping = (backend) => {
const url = `http://${backend.host}/ping`;
return request.get(url).timeout(300);
};
balancer.startHealthCheck({
ping,
});
// [ { id: '51d27b36cb9c34ff', host: 'domain1.com', weight: 10 } ]
console.info(balancer.getAvailableServers());
addAlgorithm
Add the custom load balance algorithm
name
The algorithm's namefn
The algorithm, it should return an integer.
const request = require('superagent');
const Balancer = require('superagent-load-balancer');
const balancer = new Balancer([
{
host: 'domain1.com',
},
{
host: 'domain2.com',
},
], 'getByUrl');
balancer.addAlgorithm('getByUrl', (request) => {
return request.url.length;
});
const plugin = balancer.plugin();
request.get('/user')
.use(plugin)
.then((res) => {
console.info(res.body);
})
.catch(console.error);
License
MIT