Skip to content

Repository files navigation

Message Bus - RabbitMQ Event System

This is a reusable RabbitMQ message bus for microservices communication.

Features

  • ✅ Automatic RabbitMQ connection with retry logic
  • ✅ Event publishing to exchanges and queues
  • ✅ Event subscription with durable queues
  • ✅ Automatic acknowledgment handling
  • ✅ Error handling and message requeuing
  • ✅ Service-specific queue naming

Configuration

Environment Variables

RABBITMQ_URL=amqp://guest:guest@rabbitmq:5672

Event Configuration

Events are configured in event.config.js:

"application.approved": {
  type: "exchange",        // "exchange" or "queue"
  name: "application.events", // exchange/queue name
  subscribers: ["Subscription-Service"]
}

Usage

Publishing Events

const { publishEvent } = require("message-bus");

await publishEvent("application.approved", {
  personalDetailsId: "123",
  userId: "456",
  subscriptionDetails: {...},
  approvalDetails: {...}
});

Subscribing to Events

const { subscribeToEvent } = require("message-bus");

await subscribeToEvent(
  "application.approved",
  async (data) => {
    // Handle the event data
    console.log("Application approved:", data);
  },
  "Subscription-Service"
);

Testing

Test Connection

node test-connection.js

Test with Docker

  1. Start the services:
./run-docker.sh
  1. Check RabbitMQ management console:

  2. Monitor logs for connection status:

docker logs message-bus

Architecture

Portal Service → RabbitMQ Exchange → Subscription Service
     ↓              ↓                    ↓
  Publishes    Routes Events         Consumes Events
  Events       to Queues            and Creates
                                    Subscriptions

Troubleshooting

Connection Issues

  1. Ensure RabbitMQ container is running:
docker ps | grep rabbitmq
  1. Check RabbitMQ logs:
docker logs rabbitmq
  1. Verify network connectivity:
docker network ls
docker network inspect mainnetwork

Event Not Received

  1. Check if event is published:
docker logs portal-service | grep "Published"
  1. Check if event is received:
docker logs subscription-service | grep "Processing"
  1. Verify exchange and queue exist in RabbitMQ management console

Supported Events

  • application.approved - Application approval events
  • application.rejected - Application rejection events
  • user.microsoftAuthenticated - User authentication events
  • lookuptype.* - Lookup type CRUD events
  • personalDetails.* - Personal details CRUD events
  • professionalDetails.* - Professional details CRUD events
  • subscriptionDetails.* - Subscription details CRUD events
  • userInformation.* - User information events

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages