0.1.4 • Published 9 months ago

@nest-js/circuit-breaker v0.1.4

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

Circuit Breaker

@nest-js/circuit-breaker

npm version License: MIT

Una implementación del patrón Circuit Breaker para NestJS que ayuda a manejar fallos en sistemas distribuidos, para evitar que las solicitudes se acumulen en un punto crítico.

Instalación

npm install @nest-js/circuit-breaker

Uso

import { Module } from '@nestjs/common';
import { CircuitBreakerModule } from '@nest-js/circuit-breaker';
@Module({
  imports: [
    CircuitBreakerModule
  ]
})
export class AppModule {}

Controlador

import { Controller, Get, ServiceUnavailableException } from '@nestjs/common';
import { ApiTags } from '@nestjs/swagger';
import { CircuitBreakerResponseDto } from './circuit-breaker.response.dto';
import { CircuitBreaker } from 'src/lib/decorators/circuit-breaker.decorator';

@ApiTags('Circuit Breaker Test')
@Controller('/circuit-breaker')
export class CircuitBreakerController {

  @CircuitBreaker({
    successThreshold: 3, // 3 respuestas exitosas para cerrar el circuito
    openToHalfOpenWaitTime: 30000, // 30 seconds
    failureThreshold: 1, // 1 respuesta fallida para abrir el circuito
    fallback: (status) => {
      console.log('Circuit breaker is open: ', status);
      throw new ServiceUnavailableException(
        'Circuit breaker is open. Please try again later.',
      );
    },
  })
  @Get('/test')
  public async testCircuitBreaker(): Promise<CircuitBreakerResponseDto> {
    // Simular latencia
    await new Promise(resolve => setTimeout(resolve, 500));

    // Simular error aleatorio (50% de probabilidad)
    if (Math.random() < 0.5) {
      console.log('Error simulado');
      throw new Error('Service Failure');
    }

    // Respuesta exitosa
    return {
      status: 'ok',
    };
  }
}
0.1.4

9 months ago

0.1.3

9 months ago

0.1.2

9 months ago

0.1.1

9 months ago

0.1.0

9 months ago

0.0.2

9 months ago