消息队列基础概念

返回

什么是消息队列?

消息队列就是一个中间件缓冲区 + 转发器:把发送消息的生产者和处理消息的消费者隔开。包含发消息、存消息、消费消息的过程。

消息队列有哪些功能?

  • 解耦:

    • 以电商系统为例,当用户下单付款成功以后,通常需要扣库存,发优惠券,加积分,发送短信通知等等,如果没有MQ,那么就要直接用RPC调用这些子系统,代码耦合在一起,如果后续不需要发短信通知,或者需要新增一个其他服务,那么订单系统的代码也要改。如果用MQ的话,各个服务解耦,订单系统不需要感知其他服务的存在,用户支付成功以后只需要发送一条下单成功的消息,其他有需要这个消息的服务,订阅MQ以后自行去处理消息。这样后续新增或者删除服务,订单系统并不需要改动。
  • 异步:

    • 仍然以上面的系统为例,发优惠券,加积分,发送短信等非核心操作串行调用,那么每个操作都会带来延迟时间,这就造成用户下单成功,前端页面却一直在等待响应,给用户带来不好的体验。那么如果用MQ,下单支付成功以后向MQ里面投递一条订单支付成功的消息,就可以直接响应给前端下单成功,而发短信,加积分这些非核心操作在后台执行。
  • 削峰:

    • 以秒杀系统为例,大量用户下单,如果直接请求到数据库,那么数据库承受不了这么大的压力就会宕机。如果用到MQ,那么将消息存储到MQ里面,根据下游能力逐步消费,将一瞬间的流量通过MQ存储缓冲,将流量高峰削平。

消息队列分为哪些?

  • RocketMQ:国内用得多,电商场景常见
  • Kafka:吞吐超强,适合日志、流式、事件总线
  • RabbitMQ:传统消息队列,路由灵活
  • Redis Streams:轻量方案