Configuring EventBus adapters
MemoryEventBusAdapter
To use the MemoryEventBusAdapter you only need to create instance of it.
import { MemoryEventBusAdapter } from "eridu-tech/event-bus/memory-event-bus-adapter";
const eventBusAdapter = new MemoryEventBusAdapter();
You can also provide an EventEmitter that will be used for dispatching the events in memory:
import { MemoryEventBusAdapter } from "eridu-tech/event-bus/memory-event-bus-adapter";
import { EventEmitter } from "node:events";
const eventEmitter = new EventEmitter<any>();
const eventBusAdapter = new MemoryEventBusAdapter({
eventEmitter,
});
Pass any ITransactionHooks (like a TransactionContext, MultiTransactionHooks) as the transactionHooks setting to make the adapter transaction aware. Events dispatch immediately outside a transaction, and inside transaction events dispatch after commit:
import { ExecutionContext } from "eridu-tech/execution-context";
import { AlsExecutionContextAdapter } from "eridu-tech/execution-context/als-execution-context-adapter";
import { contextToken } from "eridu-tech/execution-context/contracts";
import { TransactionContext } from "eridu-tech/transaction-context";
import { KyselyTransactionAdapter } from "eridu-tech/transaction-context/kysely-transaction-adapter";
import Sqlite from "better-sqlite3";
import { Kysely, SqliteDialect } from "kysely";
const database = new Kysely<any>({
dialect: new SqliteDialect({
database: new Sqlite("DATABASE_NAME.db"),
}),
});
export const transactionContext = new TransactionContext<Kysely<any>>({
// The token the active transaction is stored under
token: contextToken("sqlite-transaction"),
// You can choose the adapter to use
adapter: new KyselyTransactionAdapter({ database }),
// The execution context that tracks the active transaction across scopes
executionContext: new ExecutionContext(new AlsExecutionContextAdapter()),
});
import { MemoryEventBusAdapter } from "eridu-tech/event-bus/memory-event-bus-adapter";
import { transactionContext } from "./transaction-context.js";
const eventBusAdapter = new MemoryEventBusAdapter({
// Immediately outside a transaction, after commit inside transaction
transactionHooks: transactionContext,
});
MemoryEventBusAdapter lets you test your app without external dependencies like Redis, ideal for local development, unit tests, integration tests and fast E2E test for the backend application.
RedisPubSubEventBusAdapter
To use the RedisPubSubEventBusAdapter, you'll need to:
- We recommend using
SuperJsonSerdeAdapterfor this purpose
import { RedisPubSubEventBusAdapter } from "eridu-tech/event-bus/redis-pub-sub-event-bus-adapter";
import { Serde } from "eridu-tech/serde";
import { SuperJsonSerdeAdapter } from "eridu-tech/serde/super-json-serde-adapter";
import { Redis } from "ioredis";
const client = new Redis("YOUR_REDIS_CONNECTION_STRING");
const serde = new Serde(new SuperJsonSerdeAdapter());
const eventBusAdapter = new RedisPubSubEventBusAdapter({
client,
serde,
});
Pass any ITransactionHooks (like a TransactionContext, MultiTransactionHooks) as the transactionHooks setting to make the adapter transaction aware. Events dispatch immediately outside a transaction, and inside transaction events dispatch after commit:
import { RedisPubSubEventBusAdapter } from "eridu-tech/event-bus/redis-pub-sub-event-bus-adapter";
import { Serde } from "eridu-tech/serde";
import { SuperJsonSerdeAdapter } from "eridu-tech/serde/super-json-serde-adapter";
import { Redis } from "ioredis";
import { transactionContext } from "./transaction-context.js";
const client = new Redis("YOUR_REDIS_CONNECTION_STRING");
const serde = new Serde(new SuperJsonSerdeAdapter());
const eventBusAdapter = new RedisPubSubEventBusAdapter({
client,
serde,
// Immediately outside a transaction, after commit inside transaction
transactionHooks: transactionContext,
});
NoOpEventBusAdapter
The NoOpEventBusAdapter is a no-operation implementation, it performs no actions when called.
import { NoOpEventBusAdapter } from "eridu-tech/event-bus/no-op-event-bus-adapter";
const noEventBusAdapter = new NoOpEventBusAdapter();
The NoOpEventBusAdapter is useful when you want to mock out or disable your EventBus class.
Further information
For further information refer to eridu-tech/event-bus API docs.