Skip to main content

CircuitBreaker provider resolver classes

pro​

The CircuitBreakerFactoryResolver class provides a flexible way to configure and switch between different circuit-breaker adapters at runtime.

Initial configuration​

To begin using the CircuitBreakerFactoryResolver, You will need to register all required adapters during initialization.

./samples/circuit-breaker-factory-resolver-initial-config.ts
import { CircuitBreakerFactoryResolver } from "eridu-tech/circuit-breaker";
import { MemoryCircuitBreakerStorageAdapter } from "eridu-tech/circuit-breaker/memory-circuit-breaker-storage-adapter";
import { DatabaseCircuitBreakerAdapter } from "eridu-tech/circuit-breaker/database-circuit-breaker-adapter";
import { RedisCircuitBreakerAdapter } from "eridu-tech/circuit-breaker/redis-circuit-breaker-adapter";
import { SuperJsonSerde } from "eridu-tech/serde/super-json-serde";
import { Redis } from "ioredis";

const serde = new SuperJsonSerde();
export const circuitBreakerFactoryResolver = new CircuitBreakerFactoryResolver({
serde,
adapters: {
memory: new DatabaseCircuitBreakerAdapter({
adapter: new MemoryCircuitBreakerStorageAdapter(),
}),
redis: new RedisCircuitBreakerAdapter({
database: new Redis("YOUR_REDIS_CONNECTION"),
}),
},
defaultAdapter: "memory",
});

await circuitBreakerFactoryResolver.init();

Usage​

1. Using the default adapter​

./samples/circuit-breaker-factory-resolver-default-adapter.ts
import { circuitBreakerFactoryResolver } from "./circuit-breaker-factory-resolver-initial-config.js";

// Will apply circuit-breaker logic the default adapter which is MemoryCircuitBreakerStorageAdapter
await circuitBreakerFactoryResolver
.use()
.create("a")
.runOrFail(async () => {
// ... code to apply circuit-breaker logic
});
danger

Note that if you dont set a default adapter, an error will be thrown.

2. Specifying an adapter explicitly​

./samples/circuit-breaker-factory-resolver-specific-adapter.ts
import { circuitBreakerFactoryResolver } from "./circuit-breaker-factory-resolver-initial-config.js";

// Will apply circuit-breaker logic using the redis adapter
await circuitBreakerFactoryResolver
.use("redis")
.create("a")
.runOrFail(async () => {
// ... code to apply circuit-breaker logic
});
danger

Note that if you specify a non-existent adapter, an error will be thrown.

Further information​

For further information refer to eridu-tech/circuit-breaker API docs.