0.1.2 • Published 4 months ago

circuit-breaker-nestjs v0.1.2

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

Circuit Breaker for NestJS

Before installation

To install this package, run the following commands:

Installation

$ pnpm add --save-prod circuit-breaker-nestjs
$ npm install --save-prod circuit-breaker-nestjs

Getting started

You can use the CircuitBreakerInterceptor interceptor with the useGlobalInterceptors interceptor in the main.ts file to add a circuit breaker to all controllers:

import { NestFactory } from '@nestjs/core'
import { AppModule } from './app.module'
import { CircuitBreakerInterceptor } from 'circuit-breaker-nestjs'

async function bootstrap() {
  const app = await NestFactory.create(AppModule)
  app.useGlobalInterceptors(new CircuitBreakerInterceptor())
  await app.listen(3000)
}

Or you can use the CircuitBreakerInterceptor interceptor with the useInterceptors interceptor in the controller (for one controller):

import { Controller, Get, UseInterceptors } from '@nestjs/common'
import { CircuitBreakerInterceptor } from 'circuit-breaker-nestjs'

@Controller()
@UseInterceptors(CircuitBreakerInterceptor)
export class AppController {
  @Get()
  getHello(): string {
    return 'Hello World!'
  }
}

Or you can use the CircuitBreakerInterceptor interceptor with the useInterceptors interceptor in the controller (for one route):

import { Controller, Get, UseInterceptors } from '@nestjs/common'
import { CircuitBreakerInterceptor } from 'circuit-breaker-nestjs'

@Controller()
export class AppController {
  @Get()
  @UseInterceptors(CircuitBreakerInterceptor)
  getHello(): string {
    return 'Hello World!'
  }
}

Or you can use the CircuitBreakerInterceptor more flexible version interceptor with the useInterceptors interceptor in main.ts file:

import { NestFactory } from '@nestjs/core'
import { AppModule } from './app.module'
import { CircuitBreakerInterceptor } from 'circuit-breaker-nestjs'

async function bootstrap() {
  const app = await NestFactory.create(AppModule)
  app.useGlobalInterceptors(
    new CircuitBreakerInterceptor({
      failureThresholdPercentage: 50, // default 50
      halfOpenThresholdPercentage: 60, // default 50
      halfOpenRequestCount: 12, // default 10
      rangeTime: 10000, // default 60000 (1 minute)
      timeout: 50000, // default 5000 (5 seconds)
      statusCodes: [500, 501, 502, 503, 504, 505], // default [500, 501, 502, 503, 504, 505]
    }),
  )
  await app.listen(3000)
}

Or you can use the CircuitBreakerInterceptorinterceptor for manually close service with the useInterceptors interceptor in main.ts file:

import { NestFactory } from '@nestjs/core'
import { AppModule } from './app.module'
import { CircuitBreakerInterceptor, CircuitBreakerState } from 'circuit-breaker-nestjs'

async function bootstrap() {
  const app = await NestFactory.create(AppModule)
  app.useGlobalInterceptors(
    new CircuitBreakerInterceptor({
      manual: true,
      manualState: CircuitBreakerState.OPEN,
    }),
  )
  await app.listen(3000)
}

Options

OptionTypeDefaultDescription
failureThresholdPercentagenumber50The percentage of failed requests that will trip the circuit into the OPEN state.
halfOpenThresholdPercentagenumber50The percentage of requests that must succeed in the HALF_OPEN state.
halfOpenRequestCountnumber10The number of requests that can go inside service for changing state to other state in the HALF_OPEN state.
timeoutnumber5000The time in milliseconds that the circuit breaker should wait before changing the state from OPEN to HALF_OPEN.
rangeTimenumber60000The time in milliseconds that the circuit breaker check failures.
manualbooleanfalseThe manual mode for circuit breaker.
manualStateCircuitBreakerStateCircuitBreakerState.CLOSEDThe manual state for circuit breaker.
statusCodesnumber[]500>=The status codes that will considire as error.

License

Nest is MIT licensed.

Support

Nest is an MIT-licensed open source project. It can grow thanks to the sponsors and support by the amazing backers.

Stay in touch

Enjoy!

0.1.2

4 months ago

0.1.1

4 months ago

0.1.0

4 months ago