Class DatabaseCircuitBreakerProviderFactory<TAdapters>

The DatabaseCircuitBreakerProviderFactory class is immutable.

IMPORT_PATH: "@daiso-tech/core/circuit-breaker"

Type Parameters

  • TAdapters extends string

Implements

Constructors

Methods

  • Parameters

    Returns ICircuitBreakerProvider

    import { CircuitBreakerProviderFactory } from "@daiso-tech/core/circuit-breaker";
    import { MemoryCircuitBreakerStorageAdapter } from "@daiso-tech/core/circuit-breaker/memory-circuit-breaker-storate-adapter";
    import { KyselyCircuitBreakerStorageAdapter } from "@daiso-tech/core/circuit-breaker/kysely-circuit-breaker-storate-adapter";
    import { DatabaseCircuitBreakerAdapter } from "@daiso-tech/core/circuit-breaker/database-circuit-breaker-adapter";
    import { Serde } from "@daiso-tech/core/serde";
    import { SuperJsonSerdeAdapter } from "@daiso-tech/core/serde/super-json-serde-adapter";
    import Sqlite from "better-sqlite3";
    import { Kysely, SqliteDialect } from "kysely";

    const serde = new Serde(new SuperJsonSerdeAdapter());
    const circuitBreakerProviderFactory = new CircuitBreakerProviderFactory({
    serde,
    adapters: {
    memory: new MemoryCircuitBreakerStorageAdapter(),
    sqlite: new KyselyCircuitBreakerStorageAdapter({
    kysely: new Kysely({
    dialect: new SqliteDialect({
    database: new Sqlite("local.db"),
    }),
    }),
    serde,
    }),
    },
    defaultAdapter: "memory",
    });

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

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