0.8.5 • Published 2 years ago

@nestcloud2/loadbalance v0.8.5

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

NestCloud - Loadbalance

Description

This is a software load balancers primary for rest calls.

Installation

$ npm i --save @nestcloud2/loadbalance

Quick Start

Import Module

Before you import the lb module, you need import @nestcloud2/service module at first.

import { Module } from '@nestjs/common';
import { LoadbalanceModule } from '@nestcloud2/loadbalance';

@Module({
    imports: [
        LoadbalanceModule.forRoot({
            rule: 'RandomRule',
            services: [
                {
                    name: 'test-service',
                    rule: 'RoundRobinRule',
                },
            ],
        }),
    ],
})
export class AppModule {}

Import With Boot Module

Except @nestcloud2/boot module you can also use @nestcloud2/config module too.

app.module.ts:

import { Module } from '@nestjs/common';
import { BOOT } from '@nestcloud2/common';
import { BootModule } from '@nestcloud2/boot';
import { LoadbalanceModule } from '@nestcloud2/loadbalance';
import { resolve } from 'path';

@Module({
    imports: [
        BootModule.forRoot({
            filePath: resolve(__dirname, 'config.yaml'),
        }),
        LoadbalanceModule.forRootAsync({ inject: [BOOT] }),
    ],
})
export class AppModule {}

config.yaml:

loadbalance:
    rule: RandomRule
    services:
        - name: test-service
          rule: RoundRobinRule

Usage

import { Injectalbe } from '@nestjs/common';
import { InjectLoadbalancee, Loadbalance } from '@nestcloud2/loadbalance';

@Injectalbe()
export class TestService {
    constructor(@InjectLoadbalancee() private readonly lb: Loadbalance) {}

    chooseOneNode() {
        const node = this.lb.choose('your-service-name');
    }
}

Use Choose decorator

It will call lb.choose every you use this.server.

import { Injectable } from '@nestjs/common';
import { Choose, Server } from '@nestcloud2/loadbalance';

@Injectable()
export class TestService {
    @Choose('test-service')
    private readonly server: Server;
}

Custom Loadbalance Rule

import { Rule, Loadbalancer } from '@nestcloud2/loadbalance';

export class CustomLoadbalanceRule implements Rule {
    private loadbalancer: Loadbalancer;

    init(loadbalancer: Loadbalancer) {
        this.loadbalancer = loadbalancer;
    }

    choose() {
        const servers = this.loadbalancer.servers;
        return servers[0];
    }
}
import { Injectable } from '@nestjs/common';
import { UseRules } from '@nestcloud2/loadbalance';
import { CustomLoadbalanceRule } from './CustomLoadbalanceRule';

@Injectable()
@UseRules(CustomLoadbalanceRule)
export class LoadbalanceRuleRegister {}

API

class LoadbalanceModule

static forRoot(options): DynamicModule

Import loadbalance module.

fieldtypedescription
options.rulestringglobal lb rule name
options.servicesServiceOptionsset service rule

static forRootAsync(options): DynamicModule

Import loadbalance module.

fieldtypedescription
options.injectstring[]BOOT CONFIG SERVICE

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.

0.9.1

2 years ago

0.9.1-rc.0

2 years ago

0.8.5

2 years ago

0.9.0

2 years ago

0.8.4

2 years ago

0.8.3

2 years ago

0.8.0

2 years ago

0.7.21

2 years ago

0.7.20

2 years ago