- 异步处理 - 相比于传统的串行、并行方式,提高了系统吞吐量。
- 应用解耦 - 系统间通过消息通信,不用关心其他系统的处理。
- 流量削锋 - 可以通过消息队列长度控制请求量;可以缓解短时间内的高并发请求。
- 日志处理 - 解决大量日志传输。
- 消息通讯 - 消息队列一般都内置了高效的通信机制,因此也可以用在纯的消息通讯。比如实现点对点消息队列,或者聊天室等
| RabbitMQ | ActiveMQ | RocketMQ | Kafka | |
|---|---|---|---|---|
| 所属社区/公司 | Rabbit | Apache | Ali | Apache |
| 开发语言 | Erlang | Java | Java | Scala&Java |
| 多语言支持 | 语言无关 | 支持,Java优先 | Java | 支持,Java优先 |
| 消息推拉模式 | 多协议,Pull/Push均支持 | 多协议,Pull/Push均支持 | 多协议,Pull/Push均支持 | Pull |
| HA | master/slave模式,master提供服务,slave仅作备份 | 基于zookeeper+levelDB的master-slave实现方式 | 支持多master模式、多master多slave模式、异步复制模式、 | 支持replica机制。leader宕掉后,备份自动顶替,并重选leader |
| 事务 | 不支持 | 支持 | 支持 | 不支持,可通过Low Level API保证仅消费一次 |
| 集群 | 支持 | 支持 | 支持 | 支持 |
| 负载均衡 | 支持 | 支持 | 支持 | 支持 |
MQ 的常见问题有:
- 消息的顺序问题
- 消息的重复问题