跳转至

消息队列

消息队列(Message Queue),简称 MQ,指保存消息的一个容器,本质上是个队列。用于上下游解耦、非即时消息异步处理、流量削峰、日志处理等场景

常见的与消息队列相关的协议或标准有

  • JMS Java MessageService,实际上是个Java API
  • AMQP Advanced Message Queuing Protocol,最初用于解决金融领域跨平台消息传递问题,生产者与消费者可以使用不同语言开发
  • 其它:MQTTSTOMPOpenMessaging

目前为止还没有谁能统一标准,基于以上标准和协议开发的消息队列有

参考自《极客时间·消息队列高手课:该如何选择消息队列?》

  • ActiveMQ 最老牌的开源消息队列,是十年前唯一可供选择的开源消息队列,目前已进入老年期,社区也不再活跃。无论是功能还是性能方面,ActiveMQ 都与现代的消息队列存在明显的差距,它存在的意义仅限于兼容那些还在用的爷爷辈儿的系统。
  • RabbitMQ 使用最广泛的轻量级MQ,开箱即用,支持多语言客户端,支持AMQP/SMTP/STOMP等多种协议,由小众语言Erlang编写,二次开发较难,性能也比其它MQ要差很多。
  • RocketMQ 由阿里12年使用Java开发,17年捐赠给Apache软件基金会,性能比RabbitMQ高一个数量级,中文社区活跃,但在国外可能不怎么流行,兼容性较差,主要场景是处理在线业务。
  • Kafka 由Linkedin使用Scala和Java开发,后开源给Apache软件基金会,最初用于处理海量日志,目前是生态兼容最好的MQ,尤其在大数据和流计算领域,缺点是同步收发消息的响应时延比较高,不太适合在线业务场景。
  • Pulsar 新兴的开源MQ,最初由Yahoo开发,现在也属于Apache软件基金会,采用存储和计算分离的设计,目前还处于成长期
  • Redis 也支持MQ功能
  • ZeroMQ 严格来说只是一个基于消息队列的多线程网络库,如果你的需求是将消息队列的功能集成到你的系统进程中,可以考虑使用。