自学内容网 自学内容网

MQ的简单梳理

作用

集成MQ后,同步调用变成了向MQ发消息,对目标服务的调用,由同步变成了异步,实现了服务间的解耦。得益于这种异步,方法调用被封装成消息存放在MQ中,下游目标服务自行决定消费消息的速度。简言之,MQ的加入,实现了服务间的异步调用,达到解耦、削峰填谷的目的。

场景

消息可靠性

保证消息的可靠性,就要确保以下三个环节的可靠:

  1. 保证生产者发送消息到MQ这个过程的可靠
  2. 保证消息在MQ中暂存的可靠
  3. 保证消费消息的可靠。这里消费消息如果是push,即有MQ推消息到消费者,重试由MQ保证;如果消费消息是pull,则需要消费者自行实现重试逻辑以保证消息的可靠消费

生产者投递消息的可靠性:本地消息表+重试,RocketMq的事务消息(半消息)
MQ可靠性:中间件的高可用(持久化、多节点)
消费消息的可靠性:重试机制,超过重试阈值进入死信队列,通常存储非网络原因导致的问题消息,需要人工兜底

消息顺序性

同样,要保证生产者投递时有序,MQ保存时有序,消费者消费时有序。
单线程生产消息和单线程消费消息,MQ保存则需要一个抽象的有序容器,比如指定分区或指定消息组,保证消息不被打乱。

消息堆积

MQ的集成解耦了系统,使得我们可以定向的对指定服务进行横向扩容。如果消息存在堆积,说明消费者消费能力太低,通过在特定时期增加节点来快速消费消息。如果频繁出现消息堆积情况,一方面可以考虑长久性的增加消费节点,另一方面可以考虑调整消费的模式,比如将push模式改为消费者从MQ主动pull,由消费系统自己控制pull的频率。


原文地址:https://blog.csdn.net/wyy546792341/article/details/142491651

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!