Skip to main content

Event Bus Service Examples

Use these patterns to expose pub/sub behaviour through application components and socket routes.

EventBusService

import { LocalEventBusConnector } from '@twin.org/event-bus-connector-local';
import { EventBusConnectorFactory } from '@twin.org/event-bus-models';
import { EventBusService } from '@twin.org/event-bus-service';

interface BuildMetricPayload {
buildId: string;
status: 'started' | 'finished';
metric: number;
}

EventBusConnectorFactory.register('event-bus', () => new LocalEventBusConnector());

const service = new EventBusService({ eventBusConnectorType: 'event-bus' });
const metrics: number[] = [];

console.log(service.className()); // EventBusService

const subscriptionId = await service.subscribe<BuildMetricPayload>('build.status', async event => {
console.log(event.data.buildId); // B-100
console.log(event.data.status); // started
metrics.push(event.data.metric);
});

await service.publish<BuildMetricPayload>('build.status', {
buildId: 'B-100',
status: 'started',
metric: 62
});
await service.publish<BuildMetricPayload>('build.status', {
buildId: 'B-100',
status: 'finished',
metric: 71
});
await service.unsubscribe(subscriptionId);

console.log(metrics); // [62, 71]

Socket Routes

import { ComponentFactory } from '@twin.org/core';
import { LocalEventBusConnector } from '@twin.org/event-bus-connector-local';
import { EventBusConnectorFactory } from '@twin.org/event-bus-models';
import {
EventBusService,
generateSocketRoutesEventBus,
socketEntryPoints,
tagsEventBus
} from '@twin.org/event-bus-service';

EventBusConnectorFactory.register('event-bus', () => new LocalEventBusConnector());

const service = new EventBusService({ eventBusConnectorType: 'event-bus' });
ComponentFactory.register('eventBus', () => service);

const routes = generateSocketRoutesEventBus('event-bus', 'eventBus');

console.log(routes.length); // 2
console.log(routes[0].operationId); // eventBusSubscribe
console.log(routes[1].operationId); // eventBusUnsubscribe
console.log(tagsEventBus[0].name); // Event Bus
console.log(socketEntryPoints[0].defaultBaseRoute); // event-bus