RabbitMQ: Advanced Message Queuing
RabbitMQ: Advanced Message Queuing
RabbitMQ is the most widely deployed open-source message broker. It supports multiple messaging protocols and is designed for complex routing.
🏗️ The AMQP Model
Unlike Kafka, where producers write directly to a log, in RabbitMQ:
- Producer sends a message to an Exchange.
- Exchange routes the message to one or more Queues based on Bindings and Routing Keys.
- Consumer receives the message from the Queue.
🔄 Exchange Types
- Direct: Routes messages with a specific routing key to the queue that matches it exactly.
- Fanout: Routes messages to all queues bound to it (Broadcast).
- Topic: Routes messages based on wildcard matching (e.g.,
logs.*or*.error). - Headers: Uses message header attributes for routing instead of routing keys.
🛠️ Reliability Features
- Acknowledgements (ACK): The broker waits for a consumer to confirm it has processed a message before deleting it.
- Persistence: Queues and messages can be marked as durable/persistent to survive a broker restart.
- Dead Letter Exchanges (DLX): Messages that cannot be processed are routed to a separate exchange for later inspection.
💡 Best Use Cases
- Work Queues: Distributing heavy tasks among multiple workers.
- Microservice Communication: Reliable asynchronous messaging between services.
- RPC (Remote Procedure Call): Synchronous-like communication over a queue.