消息队列

EmiyaCC 于 2021-06-25 发布

什么是 MQ

MQ:Message Queue,消息队列。消息由生产者发送到 MQ 进行排队,然后由消费者对消息进行处理。QQ、微信就是典型的 MQ 场景

MQ 的作用或者是优点:

  1. 异步:
    • 例子:快递, 快递员 -> 菜鸟驿站 <- 客户
    • 作用:异步提高了系统的响应速度和吞吐量
  2. 解耦:
    • 例子:英文文献 -> 翻译机构 <- 阅读者可以读到中文文献
    • 作用:服务之间进行解耦,可以较少服务之间的影响,提高系统的稳定性和可扩展性;另外,解耦后可实现数据分发,生产者发送一个消息,可以被多个消费者消费。
  3. 削峰:
    • 长江涨水 -> 三峡大坝;秒杀系统
    • 作用:以稳定的系统资源应对突发的流量冲击,减少高峰时期对服务器压力。

MQ缺点:

RocketMQ 入门

如何保证消息的可靠传输?如果消息丢了怎么办

数据的丢失问题,可能出现在生产者、MQ、消费者中

MQ可靠传输保证

如何保证消息的顺序性

一个 Queue 对应一个消费者,或者消费者排队

如何保证消息消费的幂等性?

幂等性:防止消费者重复消费问题

所有 MQ 产品并没有提供主动解决幂等性的机制,需要由消费者自行控制。

RocketMQ:给每个消息分配一个 MessageID,这个 MessageID 就可以作为消费者判断幂等性的依据(不太建议,最好是自己带一个有业务标识的 ID(如 OrderID),来进行幂等性判断,参考 ID 生成)