消息队列

1. 什么是消息队列?

  消息队列(Message Queue,简称MQ)是在消息的传输过程中保存消息的容器,本质是个队列。消息(Message)是指在应用之间传送的数据,可以是文本字符串、嵌入对象等。

  • Producer:消息生产者,负责产生和发送消息到 Broker。

  • Broker:消息处理中心,负责消息存储、确认、重试等,一般包含多个 queue。

  • Consumer:消息消费者,负责从 Broker 中获取消息,并进行相应处理。

  常见的MQ组件有ActiveMQ、RabbitMQ、RocketMQ、Kafka等。

2. 为什么用消息队列?

(1)异步处理

  消息队列的主要特点是异步处理请求,减少请求响应时间,实现非核心流程异步化,提高系统响应性能。

(2)流量削峰

  将短时间高并发产生的事务消息存储在消息队列中,削平高峰期的并发事务,缓解系统压力。

(3)应用解耦

  上下游应用之间不使用接口调用,上游应用只负责生产消息,不需要考虑消息被哪个下游应用消费。

3. 使用消息队列带来什么问题?

(1)系统可用性降低

(2)系统复杂性提高

(3)一致性问题(分布式事务)

4. 消息队列的消息模式?

  MQ基础的消息交互模式有两个,点对点和发布/订阅。

(1)点对点模式

  消息生产者发送消息到queue,只会有一个消息消费者从queue中消费该消息。

(2)发布/订阅模式

  消息生产者发布消息到topic,由订阅topic的多个消费者消费该消息。

5. 如何保证消息队列的高可用?

  RabbitMQ 基于主从架构,使用镜像集群模式来实现高可用。每个 RabbitMQ 节点都有 queue 的完整镜像,包含 queue 的全部数据。每次写消息到 queue,都会自动把消息同步到其他节点。

6. 常见的几种MQ对比

  ActiveMQ RabbitMQ RocketMQ Kafka
开发语言 Java Erlang Java Scala
单机吞吐量 万级 万级 10万级 10万级
时效性 ms级 us级 ms级 ms级
可用性 高(主从架构) 高(主从架构) 非常高(分布式架构) 非常高(分布式架构)
功能特性 Apache项目,更新速度慢,队列数较多时支持不好 高并发,性能很好,但不利于二次开发和维护 阿里项目,性能、稳定性很好 Apache子项目,高性能分布式发布/订阅消息队列,日志领域成熟

 

posted @ 2019-11-28 13:54  PIPO2  阅读(207)  评论(0编辑  收藏  举报