什么是消息队列?


一、什么是消息队列?

消息队列(Message Queue),简称MQ,是一种应用间的通信方式,主要由三部分组成:

  • 生产者(Producer):负责消息发送
  • 代理(Broker):负责消息存储
  • 消费者(Consumer):负责消息消费

二、消息队列有什么好处?

消息队列的好处主要有:解耦、异步、削峰

  • 解耦:在一个复杂的系统里,不同的模块或服务之间可能需要相互依赖,如果直接用接口调用的方式进行交互,那么会造成代码耦合。如果其中一个模块发生改变,那么依赖的其他模块就需要同时做出改变。而使用消息队列后,我们只需要负责往队列里写消息,然后依赖的模块去监听即可,实现了模块之间的解耦。
  • 异步:比如有些场景不要求实时、或者比较耗时,如果用同步的方式去处理就会阻塞流程,导致系统性能下降。所以使用消息队列可以异步处理这些消息,提高系统响应速度。(如发短信、下单通知等)
  • 削峰:一般适用于流量高的场景,避免来不及消费的问题,使用消息队列的话就可以提高系统的吞吐量和响应速度。

三、市面上主流的消息队列对比

市面上主流的消息队列主要有Kafka、RabbitMQ、RocketMQ等,他们的区别如下表所示:

Kafka RabbitMQ RocketMQ 备注
消费推拉模式 pull push pull pull适用于高吞吐量场景,允许消费者自己进行流量控制,但可能消息不实时,相反push适用于实时性较高的场景,但是要保证消费者的消费能力
消息丢失 参数优化(ack机制)后可以0丢失 参数优化后可以0丢失 可能性很低
可用性 很高(分布式) 很高(主从) 高(主从)
消息传递模型 发布-订阅模型 点对点模式、发布-订阅模式 点对点模式、发布-订阅模式
数据持久化 支持,追加写 支持 支持
延迟队列 不支持 支持 支持
消息回溯 支持 不支持 支持 如Kafka通过指定Offset或时间戳可重复消费消息
消息顺序性 分区有序 不支持 不支持
消息延迟 毫秒 微秒 毫秒
优先级队列 不支持 支持 不支持 优先级队列里的消息会优先消费
适用场景 适用于高吞吐量、低延迟的实时数据处理和事件驱动架构场景,具有良好的可伸缩性和持久性。如用户行为日志分析等 适用于需要可靠消息传递和灵活消息模型的场景,具有丰富的插件和社区支持。如金融系统的支持、订单处理等 适用于高性能、高可用性的消息传递场景,具有丰富的消息过滤和分布式事务等特性。如电商秒杀、用户推送等

文章作者: GaryLee
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 GaryLee !
  目录