load balancer plugin for superagent
npm install superagent-load-balancer



Load balancer plugin for superagent
``bash`
$ npm install superagent-load-balancer
View the ./examples directory for working examples.
- backends the backend list
- name The name of backend
- host The host of backend
- protocol The protocol, optional, default is 'http'
- ip The ip of backend, optional
- port The port of backend, optional
- weight 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 is round-robin
`js
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);
`
- 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 interval
- window each check the total count of ping
- threshold each check the healthy count is bigger than threshold, the backend is healthy. Otherwise is sick
`jshttp://${backend.host}/ping
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 = ;
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);
`
Add listener function to healthy or sick event
`jshttp://${backend.host}/ping
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 = ;
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);
`
Get the available server list. It is not disabled and backup.
`jshttp://${backend.host}/ping
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 = ;`
return request.get(url).timeout(300);
};
balancer.startHealthCheck({
ping,
});
// [ { id: '51d27b36cb9c34ff', host: 'domain1.com', weight: 10 } ]
console.info(balancer.getAvailableServers());
Add the custom load balance algorithm
- name The algorithm's name
- fn The algorithm, it should return an integer.
`js
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);
``
MIT