Skip to content

消息队列选型 ​

选消息队列不是选「最好的」,而是选「最适合的」。本章聚焦 RabbitMQ 的核心优势与适用场景。完整技术对比见 Kafka · 消息队列选型。

RabbitMQ 的核心优势 ​

维度RabbitMQ 的特点
路由能力4 种 Exchange(Direct/Topic/Fanout/Headers),路由规则灵活
延迟消息路由与投递模型适合对交互延迟敏感的业务,实际端到端延迟取决于队列类型、确认策略、持久化与负载
协议支持支持 AMQP,可通过插件支持 MQTT、STOMP,适合有 MQTT 接入需求的 IoT 场景
死信队列提供原生死信机制,需配置 DLX 及触发条件
延迟消息可经 TTL+DLX 延迟转发;RabbitMQ 4.4 起 Quorum Queue 原生支持延迟投递,旧版延迟交换机插件已停止维护
运维成本小规模业务场景下部署较轻,实际成本取决于集群规模、高可用要求与运维方式

选 RabbitMQ 的场景 ​

  • 复杂路由规则(按 routing key 精确/模糊匹配)
  • 消息量中等,吞吐需求可由单节点或小集群满足
  • 对交互延迟敏感的业务
  • IoT 设备通信(MQTT 协议)
  • 企业内部微服务间可靠投递
  • 需要死信队列、延迟消息等高级特性

通常优先考虑其他方案的场景 ​

场景原因推荐
日志收集/大数据流长期保留、大规模事件流及多消费者独立回放通常更适合成熟日志流平台;RabbitMQ Streams 也具备日志式保留与 offset 消费能力Kafka
极高吞吐需评估集群与队列类型实际上限后再决定Kafka / Pulsar
消息回溯经典队列无基于 offset 的原生历史重读,重新入队/重发布语义与成本不同;RabbitMQ Streams 支持日志式保留与 offset 消费Kafka
流处理无原生流处理引擎Kafka Streams / Flink

组合使用 ​

实际项目中经常组合:

txt
IoT 设备 ──MQTT──▶ RabbitMQ ──AMQP──▶ 业务服务
                                      │
                                      ▼
                              Kafka(日志/事件流)

上图表达的是业务服务处理 RabbitMQ 消息后,将日志/事件写入 Kafka 的转发链路。若 RabbitMQ 与 Kafka 承载的是互不相关的独立消息流,应去掉该箭头。生产环境需处理 Kafka 写入失败、重复投递与重试;要求可靠转发时应设计幂等机制与补偿方案。

不要为了「统一技术栈」强行用一个 MQ 解决所有问题。RabbitMQ 擅长业务消息、灵活路由;Kafka 擅长大数据量、高吞吐。各取所长。

Released under the MIT License.