1、什么是消息队列?

消息队列,是分布式系统中重要的组件。

主要解决应用耦合,异步消息,流量削锋等问题。
可实现高性能,高可用,可伸缩和最终一致性架构,是大型分布式系统不可缺少的中间件。
目前主流的消息队列有:

Kafka
RabbitMQ
RocketMQ ,老版本是 MetaQ 。
ActiveMQ ,目前用的人越来越少了。
另外,消息队列容易和 Java 中的本地 MessageQueue 搞混,所以消息队列更多被称为消息中间件、分布式消息队列等等。

二、消息队列由哪些角色组成?
如下图所示:

生产者(Producer):负责产生消息。
消费者(Consumer):负责消费消息
消息代理(Message Broker):负责存储消息和转发消息两件事情。其中,转发消息分为推送和拉取两种方式。
1. 拉取(Pull),是指 Consumer 主动从 Message Broker 获取消息
   2. 推送(Push),是指 Message Broker 主动将 Consumer 感兴趣的消息推送给 Consumer 。

三、消息队列有哪些使用场景?
一般来说,有下面使用场景:

应用解耦
异步处理
流量削峰
消息通讯
日志处理
其中,应用解耦、异步处理是比较核心的。

一. 为什么要使用消息队列

  • 消息队列可以对系统进行解耦,提高响应速度,系统功能向内聚合,对外开放;
  • 消息队列可以对系统异步功能进行剥离,减少功能耦合,提供开发效率;
  • 消息队列可以削峰限流,确保下游消费者稳定运行;

二. 消息队列有什么缺点

  • 系统可靠性降低,解耦后,多个系统通过消息中间件交互,消息中间件挂了整个系统就挂了;
  • 系统开发复杂度提升,需要考虑消息的处理,包括消息幂等性(重复消费问题),消息保序性(一个订单多条消息问题),以及消息中间件本身的持久化和稳定性可靠性;
  • 消息一致性问题,如果一个功能发给多个系统,要所有系统都执行成功才算成功时,需要确保一个功能多个消息的完整一致性