0.7.1 • Published 4 years ago

@dimensionfourcloud/loadbalance v0.7.1

Weekly downloads
-
License
MIT
Repository
github
Last release
4 years ago

NestCloud - Loadbalance

Description

This is a software load balancers primary for rest calls.

中文文档

Installation

$ npm i --save @dimensionfourcloud/consul consul @dimensionfourcloud/loadbalance

Quick Start

Import Module

import { Module } from '@nestjs/common';
import { ConsulModule } from '@dimensionfourcloud/consul';
import { ServiceModule } from '@dimensionfourcloud/service';
import { LoadbalanceModule } from '@dimensionfourcloud/loadbalance';
import { BootModule } from '@dimensionfourcloud/boot';
import { NEST_BOOT, NEST_CONSUL } from '@dimensionfourcloud/common';

@Module({
  imports: [
      ConsulModule.register({dependencies: [NEST_BOOT]}),
      ServiceModule.register({dependencies: [NEST_BOOT, NEST_CONSUL]}),
      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 '@dimensionfourcloud/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 '@dimensionfourcloud/loadbalance';

@Injectable()
export class TestService {
  @Choose('your-service-name')
  private readonly yourServiceServer: Iserver;
}

Custom Loadbalance Rule

import { Rule, Loadbalancer } from '@dimensionfourcloud/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.

fieldtypedescription
options.dependenciesstring[]if you are using @dimensionfourcloud/boot module, please set NEST_BOOT
options.ruleClsstring | classlb rule,support:RandomRule, RoundRobinRule, WeightedResponseTimeRule or custom lb rule, use relative path
options.rulesRuleOptionone service use one rule, eg:[{service: '', ruleCls: ''}]

class Loadbalance

choose(service: string): Server

Choose a node that running the specific service.

fieldtypedescription
servicestringthe service name

state(): {service: string: IServer[]}

List all servers info for all services.

chooseLoadbalancer(service: string): Loadbalancer

Get loadbalancer.

fieldtypedescription
servicestringthe service name

Stay in touch

License

NestCloud is MIT licensed.