消息队列

什么是消息队列?

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

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

目前主流的消息队列有

  • Kafka
  • RabbitMQ
  • RocketMQ ,老版本是 MetaQ 。
  • ActiveMQ ,目前用的人越来越少了。

另外,消息队列容易和 Java 中的本地 MessageQueue 搞混,所以消息队列更多被称为消息中间件、分布式消息队列等等。

消息队列由哪些角色组成?

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

消息队列有哪些使用场景?

  • 应用解耦
  • 异步处理
  • 流量削峰
  • 消息通讯
  • 日志处理

为什么使用消息队列进行应用解耦?

有了消息队列之后,从主动调用的方式,变成了消息的订阅发布( 或者说,事件的发布和监听 ),从而解耦。

为什么使用消息队列进行异步处理?

当前返回结果不依赖于异步处理结果。没有强耦合性。

为什么使用消息队列进行流量消峰?

  • 通过将请求先转发到消息队列中。然后,系统 A 慢慢的按照数据库能处理的并发量,从消息队列中逐步拉取消息进行消费。在生产中,这个短暂的高峰期积压是允许的,😈 相比把数据库打挂来说。
  • 当然,可能有胖友说,访问量这么大,不会把消息队列给打挂么?相比来说,消息队列的性能会比数据库性能更好,并且,横向的扩展能力更强。