1. class MessageQueue {
  2. constructor(name) {
  3. this.name = name;
  4. this.topics = {}; // topic: [message1, message2, ...]
  5. }
  6. subscribe(topic, callback) {
  7. if (!this.topics[topic]) {
  8. this.topics[topic] = [];
  9. }
  10. this.topics[topic].push(callback);
  11. }
  12. publish(topic, message) {
  13. if (this.topics[topic]) {
  14. this.topics[topic].forEach(callback => callback(message));
  15. }
  16. }
  17. }
  18. class DryRunMessageQueueInitializer {
  19. constructor() {
  20. this.queues = {};
  21. }
  22. createQueue(name) {
  23. this.queues[name] = new MessageQueue(name);
  24. }
  25. // Allows manual topic and message configuration for dry-run
  26. configureTopic(queueName, topic, messages) {
  27. if (!this.queues[queueName]) {
  28. console.warn(`Queue "${queueName}" does not exist.`);
  29. return;
  30. }
  31. this.queues[queueName].topics[topic] = messages;
  32. }
  33. //Allows manual subscription configuration
  34. configureSubscription(queueName, topic, callback) {
  35. if (!this.queues[queueName]) {
  36. console.warn(`Queue "${queueName}" does not exist.`);
  37. return;
  38. }
  39. this.queues[queueName].subscribe(topic, callback);
  40. }
  41. }
  42. //Example usage:
  43. // const initializer = new DryRunMessageQueueInitializer();
  44. // initializer.createQueue("myQueue");
  45. // initializer.configureTopic("myQueue", "topic1", ["message1", "message2"]);
  46. // initializer.configureSubscription("myQueue", "topic1", (message) => console.log(`Received: ${message}`));
  47. // initializer.publish("myQueue", "testMessage");

Add your comment