首页 > 编程笔记

常用消息中间件(消息队列)汇总

消息队列(message queue,MQ)使用典型的生产者和消费者模型,生产者不断向消息队列中生产消息,消费者不断从消息队列中获取消息。消息的生产和消费都是异步的这一特性,使得我们可以利用消息队列轻松地实现了系统之间的解耦。

另外,消息队列也称为消息中间件,通过利用高效的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。

目前,市场上有很多主流的消息中间件,如 ActiveMQ、RabbitMQ、Kafka、RocketMQ 等,它们各自有一些优势和劣势,大家可以根据自己的需求或目的有针对性地选择消息中间件。

消息中间件及其功能如表1所示。

表1:消息中间件及其功能
名称 功能
ActiveMQ Apache 出品,一个能力强劲的开源消息总线,完全支持 JMS(Java Messaging Service,Java消息服务)规范,具有丰富的 API 和多种集群架构模式。
RabbitMQ 使用 Erlang 语言开发的开源消息队列系统,基于 AMQP(Advanced Message Queuing Protocol,高级消息队列协议)的主要特征是面向消息、队列、路由、可靠性和安全。

AMQP 更多用在企业系统内对数据的一致性、稳定性和可靠性要求很高的场景,对性能吞吐量的要求不高。
Kafka LinkedIn 开源的分布式消息订阅系统,目前归属 Apache 顶级开源项目,主要特点是基于 Pull 模式来处理消息消费,追求高吞吐量,一开始用于日志的收集和传输,适合大数据的数据收集业务。
RocketMQ 阿里巴巴开源的消息中间件,纯 Java 开发,具有高吞吐量和高可用性,适合大规模分布式系统应用。

RocketMQ 的思路起源于 Kafka,但并不是 Kafka 的复制,它优化了消息的可靠存储和事务,目前在阿里集团广泛使用。

目前大家经常使用的是 Kafka 和 RabbitMQ,其中:

推荐阅读