@nestcloud/loadbalance v0.7.17
NestCloud - Loadbalance
Description
This is a software load balancers primary for rest calls.
Installation
$ npm i --save @nestcloud/consul consul @nestcloud/loadbalance
Quick Start
Import Module
import { Module } from '@nestjs/common';
import { ConsulModule } from '@nestcloud/consul';
import { LoadbalanceModule } from '@nestcloud/loadbalance';
import { BootModule } from '@nestcloud/boot';
import { NEST_BOOT } from '@nestcloud/common';
@Module({
imports: [
ConsulModule.register({dependencies: [NEST_BOOT]}),
BootModule.register(__dirname, 'bootstrap.yml'),
LoadbalanceModule.register({dependencies: [NEST_BOOT], customRulePath: __dirname})
],
})
export class ApplicationModule {}
Configurations
consul:
host: localhost
port: 8500
loadbalance:
ruleCls: RandomRule
rules:
- {service: 'your-service-name', ruleCls: 'RoundRobinRule'}
- {service: 'your-service-name', ruleCls: 'rules/CustomRule'}
Usage
import { Component } from '@nestjs/common';
import { InjectLoadbalancee, Loadbalance } from '@nestcloud/loadbalance';
@Component()
export class TestService {
constructor(@InjectLoadbalancee() private readonly lb: Loadbalance) {}
async chooseOneNode() {
const node = this.lb.choose('your-service-name');
}
}
Use Choose decorator
import { Injectable } from '@nestjs/common';
import { Choose } from '@nestcloud/loadbalance';
@Injectable()
export class TestService {
@Choose('your-service-name')
private readonly yourServiceServer: Iserver;
}
Custom Loadbalance Rule
import { Rule, Loadbalancer } from '@nestcloud/loadbalance';
export class CustomRule implements Rule {
private loadbalancer: Loadbalancer;
init(loadbalancer: Loadbalancer) {
this.loadbalancer = loadbalancer;
}
choose() {
const servers = this.loadbalancer.servers;
return servers[0];
}
}
API
class LoadbalanceModule
static register(options): DynamicModule
Import nest loadbalance module.
field | type | description |
---|---|---|
options.dependencies | string[] | if you are using @nestcloud/boot module, please set NEST_BOOT |
options.ruleCls | string | class | lb rule,support:RandomRule, RoundRobinRule, WeightedResponseTimeRule or custom lb rule, use relative path |
options.rules | RuleOption | one service use one rule, eg:[{service: '', ruleCls: ''}] |
class Loadbalance
choose(service: string): Server
Choose a node that running the specific service.
field | type | description |
---|---|---|
service | string | the service name |
state(): {service: string: IServer[]}
List all servers info for all services.
chooseLoadbalancer(service: string): Loadbalancer
Get loadbalancer.
field | type | description |
---|---|---|
service | string | the service name |
Stay in touch
- Author - NestCloud
License
NestCloud is MIT licensed.
3 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago