Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import { FdConsumeContext } from "./fd-consume-context";
- import { FdConsumer } from "./fd-consumer";
- import { createError } from "@/fd/fd-toolbox/errors/errors";
- const messageConsumers = new Map<string, FdConsumer<object>[]>();
- export function registerConsumer<T extends object>(messageType: string, consumer: FdConsumer<T>) {
- const existingConsumers = messageConsumers.get(messageType) ?? [];
- messageConsumers.set(messageType, [...existingConsumers, consumer as FdConsumer<object>]);
- }
- function getConsumers<T extends object>(message: T): FdConsumer<T>[] {
- const messageType = message.constructor.name;
- return (messageConsumers.get(messageType) ?? []) as FdConsumer<T>[];
- }
- export async function publishMessage<T extends object>(message: T) {
- try {
- const messageHandlers = getConsumers<T>(message);
- const consumeContext: FdConsumeContext<T> = {
- message: message,
- };
- for (const consumer of messageHandlers) {
- try {
- await consumer.consume(consumeContext);
- } catch (error) {
- throw createError(`Error in consumer ${consumer.constructor.name}`);
- }
- }
- } catch (error) {
- throw createError("Error in message service Publish");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement