Skip to main content

Transports Overview

Transports handle message delivery between services.

Choosing a Transport​

TransportBest ForFeatures
RabbitMQGeneral purposeTopic routing, DLQ, clustering
KafkaHigh throughputPartitioning, replay, ordering
SQSAWS nativeFIFO queues, serverless
Azure Service BusAzure nativeSessions, scheduling
GCP Pub/SubGCP nativeGlobal, serverless
RedisLow latencyStreams, consumer groups
NATSCloud nativeJetStream, lightweight
In-MemoryTestingNo external deps

Transport Interface​

All transports implement:

interface Transport {
start(): Promise<void>;
stop(): Promise<void>;
subscribe<T>(options: TransportSubscribeOptions, handler: Handler<T>): Promise<void>;
publish<T>(message: T, options: TransportPublishOptions): Promise<void>;
}

Basic Usage​

import { createBus } from '@saga-bus/core';
import { RabbitMqTransport } from '@saga-bus/transport-rabbitmq';

const transport = new RabbitMqTransport({
url: 'amqp://localhost:5672',
});

const bus = createBus({
transport,
store,
sagas: [{ definition: orderSaga }],
});

await bus.start();

Configuration Patterns​

Environment-Based​

function createTransport() {
if (process.env.NODE_ENV === 'test') {
return new InMemoryTransport();
}
return new RabbitMqTransport({
url: process.env.RABBITMQ_URL!,
});
}