Advertisement
djbob2000

Untitled

Jan 27th, 2025
10
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.29 KB | None | 0 0
  1. import { FdConsumeContext } from "./fd-consume-context";
  2. import { FdConsumer } from "./fd-consumer";
  3. import { createError } from "@/fd/fd-toolbox/errors/errors";
  4.  
  5. const messageConsumers = new Map<string, FdConsumer<object>[]>();
  6.  
  7. export function registerConsumer<T extends object>(messageType: string, consumer: FdConsumer<T>) {
  8. const existingConsumers = messageConsumers.get(messageType) ?? [];
  9. messageConsumers.set(messageType, [...existingConsumers, consumer as FdConsumer<object>]);
  10. }
  11.  
  12. function getConsumers<T extends object>(message: T): FdConsumer<T>[] {
  13. const messageType = message.constructor.name;
  14. return (messageConsumers.get(messageType) ?? []) as FdConsumer<T>[];
  15. }
  16.  
  17. export async function publishMessage<T extends object>(message: T) {
  18. try {
  19. const messageHandlers = getConsumers<T>(message);
  20.  
  21. const consumeContext: FdConsumeContext<T> = {
  22. message: message,
  23. };
  24.  
  25. for (const consumer of messageHandlers) {
  26. try {
  27. await consumer.consume(consumeContext);
  28. } catch (error) {
  29. throw createError(`Error in consumer ${consumer.constructor.name}`);
  30. }
  31. }
  32. } catch (error) {
  33. throw createError("Error in message service Publish");
  34. }
  35. }
  36.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement