This is a reusable RabbitMQ message bus for microservices communication.
- ✅ 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
RABBITMQ_URL=amqp://guest:guest@rabbitmq:5672Events are configured in event.config.js:
"application.approved": {
type: "exchange", // "exchange" or "queue"
name: "application.events", // exchange/queue name
subscribers: ["Subscription-Service"]
}const { publishEvent } = require("message-bus");
await publishEvent("application.approved", {
personalDetailsId: "123",
userId: "456",
subscriptionDetails: {...},
approvalDetails: {...}
});const { subscribeToEvent } = require("message-bus");
await subscribeToEvent(
"application.approved",
async (data) => {
// Handle the event data
console.log("Application approved:", data);
},
"Subscription-Service"
);node test-connection.js- Start the services:
./run-docker.sh-
Check RabbitMQ management console:
- URL: http://localhost:15672
- Username: guest
- Password: guest
-
Monitor logs for connection status:
docker logs message-busPortal Service → RabbitMQ Exchange → Subscription Service
↓ ↓ ↓
Publishes Routes Events Consumes Events
Events to Queues and Creates
Subscriptions
- Ensure RabbitMQ container is running:
docker ps | grep rabbitmq- Check RabbitMQ logs:
docker logs rabbitmq- Verify network connectivity:
docker network ls
docker network inspect mainnetwork- Check if event is published:
docker logs portal-service | grep "Published"- Check if event is received:
docker logs subscription-service | grep "Processing"- Verify exchange and queue exist in RabbitMQ management console
application.approved- Application approval eventsapplication.rejected- Application rejection eventsuser.microsoftAuthenticated- User authentication eventslookuptype.*- Lookup type CRUD eventspersonalDetails.*- Personal details CRUD eventsprofessionalDetails.*- Professional details CRUD eventssubscriptionDetails.*- Subscription details CRUD eventsuserInformation.*- User information events