A component of nestcloud. NestCloud is a nest framework micro-service solution.
This is a software load balancers primary for rest calls.
$ npm i --save nest-consul consul nest-consul-loadbalance
import { Module } from '@nestjs/common';
import { ConsulModule } from 'nest-consul';
import { LoadbalanceModule } from 'nest-consul-loadbalance';
@Module({
imports: [
ConsulModule.register({
host: '127.0.0.1',
port: 8500
}),
LoadbalanceModule.register({
rules: [
{service: 'test-service', ruleCls: 'RandomRule'},
{service: 'user-service', ruleCls: '../rules/CustomRule'}
]
})
],
})
export class ApplicationModule {}
If you use nest-boot module.
import { Module } from '@nestjs/common';
import { ConsulModule, CONSUL_ADAPTER } from 'nest-consul';
import { LoadbalanceModule } from 'nest-consul-loadbalance';
import { BootModule, BOOT_ADAPTER } from 'nest-boot';
@Module({
imports: [
ConsulModule.register({adapter: BOOT_ADAPTER}),
BootModule.register(__dirname, 'bootstrap.yml'),
LoadbalanceModule.register({adapter: BOOT_ADAPTER})
],
})
export class ApplicationModule {}
consul:
host: localhost
port: 8500
loadbalance:
rules:
- {service: 'test-service', ruleCls: 'RandomRule'}
- {service: 'user-service', ruleCls: '../rules/CustomRule'}
import { Component } from '@nestjs/common';
import { InjectLoadbalancee, Loadbalance } from 'nest-consul-loadbalance';
@Component()
export class TestService {
constructor(@InjectLoadbalancee() private readonly lb: Loadbalance) {}
async chooseOneNode() {
const node = this.lb.choose('user-service');
}
}
import { Rule, Loadbalancer } from 'nest-consul-loadbalance';
export class CustomRule implements Rule {
private loadbalancer: Loadbalancer;
init(loadbalancer: Loadbalancer) {
this.loadbalancer = loadbalancer;
}
choose() {
const servers = this.loadbalancer.servers;
return servers[0];
}
}
Import nest consul loadbalance module.
field | type | description |
---|---|---|
options.adapter | string | if you are using nest-boot module, please set BOOT_ADAPTER |
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: ''}] |
Choose a node that running the specific service.
field | type | description |
---|---|---|
service | string | the service name |
Get loadbalancer.
field | type | description |
---|---|---|
service | string | the service name |
- Author - Miaowing
Nest is MIT licensed.