OSS¶
by-gemini | RabbitMQ | Apache RocketMQ | ZeroMQ ($\text{ØMQ}$) |
---|---|---|---|
Architectural Model | Brokered (Central Server) | Brokered (NameServer + Broker Cluster) | Brokerless (Networking Library) |
Primary Use Case | General purpose messaging, Complex Routing, Task Queues (e.g., Celery) | High-volume, High-reliability, Transactional Messaging, E-commerce, Financial Systems. | High-speed/Low-latency messaging, Building custom, light-weight P2P communication. |
Messaging Paradigm | Queue-based (Exchanges route to Queues) | Partitioned Queue-based (Topics) | Socket-based patterns (e.g., PUB/SUB, REQ/REP) |
Message Persistence | Strong (Configurable to disk for durability) | Strong (Financial-grade reliability) | None by default (Messages are lost if no receiver is connected). |
Throughput & Latency | Moderate Throughput, Very Low Latency | High Throughput, Low Latency (Optimized for scale) | Extremely High Throughput and Lowest Latency (due to brokerless design) |
Scalability | Moderate (Clustering/Mirroring can add complexity/overhead) | High (Separate NameServer and Broker for easy horizontal scaling) | Excellent (Scales N-to-N by adding endpoints, though developer must manage topology) |
Message Routing | Most Flexible (Uses Exchanges: Direct, Topic, Fanout, etc.) | Flexible (Topic and Tag-based routing) | Simple (Pattern-based: must be coded by application developer) |
Complexity | Easier to set up and manage for standard use cases. | Moderate to High (More complex architecture with NameServer). | High (Requires developers to manage connection logic, fault-tolerance, and message loss). |
Implementation | Erlang | Java | C++ (Language bindings for many languages) |
- https://github.com/rabbitmq | when you need a tried-and-true message broker with a focus on flexible routing, message reliability, and standard enterprise messaging patterns.
- https://github.com/apache/rocketmq | when you need financial-grade reliability, high throughput, and features like transactional messages, especially for large-scale distributed systems.
- https://github.com/zeromq | when you need the fastest possible message transfer between services and are willing to write the application-level logic for reliability, persistence, and complex routing yourself. It is not a broker, but a library.
IBM¶
- client libraries: https://developer.ibm.com/articles/mq-downloads/
- 9.2.4: https://hub.docker.com/r/ibmcom/mq/
https://github.com/ibm-messaging/mq-container/blob/master/docs/usage.md
docker run \
--env LICENSE=accept \
--env MQ_QMGR_NAME=QM1 \
--publish 1414:1414 \
--publish 9443:9443 \
--detach \
--volume qm1data:/mnt/mqm \
icr.io/ibm-messaging/mq