如何保证mq消息必达

author author     2022-09-06     289

关键词:

此文章属于笔记,原属58沈剑

一、MQ消息必达,架构上的两个核心设计点:

  1. 消息落地
  2. 消息超时、重传、确认
  3. 四大部件:发送端 接收端 服务端 固化存储组成

二、上半场消息必达以及消息重复问题

  1. 上半场的流程
    1. 发送端MQ-client 将消息发送给服务端MQ-server
    2. 服务端MQ-server将消息落地
    3. 服务端MQ-server 回ACK(表示确认) 2.如果3丢失 发送端在超时后,又会发送一遍,此时重发是MQ-client发起的,消息处理的是MQ-server 为了避免2 重复落地,对每条MQ消息系统内部需要生成一个inner-msg-id,作为去重和幂等的依据,这个内部消息ID 的特点是
    4. 全局唯一
    5. MQ生成,具备业务无关性,对消息发送方和消息接收

三、下半场的消息必达以及消息重复问题

  1. 下半场的流程
    1. 服务端将消息发给MQ-client
    2. MQ-client将消息消费 并通知MQ-server
    3. MQ-server 落地消息删除
  2. 需要强调的是,接收端MQ-client回ACK消息是MQ-client主动发起的,因为MQ-server不知道接收端何时消费完。 3.如果5丢失,那么在超时后MQ-server会重新发送消息,此时可能导致MQ-client收到重复消息,为了保证业务的幂等性,业务消息中,必须有一个biz-id,作为去重的依据,这个业务ID的特性是
    1. 对于同一个业务场景,全局唯一
    2. 由业务消息发送方生成,业务相关
    3. 由业务消费方消费判断重复问题,以保证幂等

四、总结

MQ为了保证消息必达,消息上下半场均可能发送重复消息,如何保证消息的幂等性呢

  1. 上半场,MQ-server生成inner-msg-id,保证上半场幂等 此ID全局唯一,业务无关,由MQ保证,对上下MQ-client屏蔽
  2. 下半场,由发送方带入biz-id 业务方接受并判断重复问题,保证幂等,这个ID对单业务唯一,业务相关,对MQ透明 结论 幂等性,不仅对MQ有要求,对业务上下游也有要求

mq相关问题

...MQ优缺点优点缺点各种MQ的适用场景activemqrabbitmqrocketmqkafka如何保证MQ高可用?rabbitmq高可用kafka高可用如何保证消息不被重复消费发送的消息丢失rabbitmq的消息丢失kafka的消息丢失如何保证消息的顺序性?MQ相关问题为什么使用MQ解... 查看详情

mq消息队列(代码片段)

...点1.3消息队列的缺点1.4消息队列比对2、RabbitMQ2.1、RabbitMQ如何保证消息不被重复消费2.2、RabbitMQ如何保证消息不丢失2.2.1生产者丢数据2.2.2消息队列丢数据2.2.3消费者丢数据2.3、RabbitMQ如何保证消息有序2.4、RabbitMQ如何处理消息堆积... 查看详情

mq——如何保证消息不会丢失(代码片段)

一条消息从生产到消费完成这个过程,可以划分三个阶段,为了方便描述,我给每个阶段分别起了个名字。生产阶段:在这个阶段,从消息在Producer创建出来,经过网络传输发送到Broker端。存储阶段:在这个阶段,消息在Broker端存... 查看详情

关于mq的几件小事如何保证消息不丢失(代码片段)

1.mq原则数据不能多,也不能少,不能多是说消息不能重复消费,这个我们上一节已解决;不能少,就是说不能丢失数据。如果mq传递的是非常核心的消息,支撑核心的业务,那么这种场景是一定不能丢失数据的。2.丢失数据场景... 查看详情

mq中如何保证消费者顺序消费

...。但是有的时候消息按照顺序处理是很重要的,那我们该如何来保证消息的顺序呢,下面将从activemq和rocketmq来看看,它们是如何来保证消息的顺序问题的?我们还可以有别的处理方案么?1、利用Activemq的高级特性:consumer之独有... 查看详情

mq中的坑及高并发下保证接口的幂等性

...3消息丢失问题4消息顺序问题5消息堆积6系统复杂度提升4如何解决这些问题?1重复消息问题2数据一致性问题3消息丢失问题4消息顺序问题5消息堆积高并发下如何保证接口幂等性?接口防重设计1insert前先select2加悲观锁3加乐观锁 查看详情

mq中的坑及高并发下保证接口的幂等性

...3消息丢失问题4消息顺序问题5消息堆积6系统复杂度提升4如何解决这些问题?1重复消息问题2数据一致性问题3消息丢失问题4消息顺序问题5消息堆积高并发下如何保证接口幂等性?接口防重设计1insert前先select2加悲观锁3加乐观锁 查看详情

rabbitmq如何保证消息可靠性(代码片段)

个人博客请访问 http://www.x0100.top               如何保证消息的可靠性?消息队列如何进行限流?如何设置延时队列进行延时消费?1.📖如何保证消息的可靠性?先来看看我们的万年老图,从图上... 查看详情

面试官问:如何保证mq消息是有序的?(代码片段)

为了系统间解耦,我们通常会引入MQ框架,大家各司其职共同完成上下游的业务流程。大致过程:生产端,创建一条消息,通过网络发送到MQServerMQ将消息存储在topic的一个分区里消费端,从分区中拉取消息&... 查看详情

浅谈rocketmq如何保证消息不丢失(代码片段)

RocketMQ如何保证消息不丢失?一、明确丢失消息场景二、RocketMQ避免消息丢失解决方案1、消息生产者使用事务消息2、配置同步刷盘+Dledger主从架构3、消息消费者端使用同步消费机制4、设计降级方案MQ如何避免消息不丢失&#x... 查看详情

浅谈rocketmq如何保证消息不丢失(代码片段)

RocketMQ如何保证消息不丢失?一、明确丢失消息场景二、RocketMQ避免消息丢失解决方案1、消息生产者使用事务消息2、配置同步刷盘+Dledger主从架构3、消息消费者端使用同步消费机制4、设计降级方案MQ如何避免消息不丢失&#x... 查看详情

3、rabbitmq如何保证消息不被重复消费

参考技术A我们使用MQ的时候肯定是消息是准确的,既不能多也不能少。那我们来看看什么情况下可能会出现重复消费的情况。一般来说消费者消费完消息后,会ack到MQ然后MQ会删除这条消息。但假设由于网络原因这条ACK丢失了,... 查看详情

关于mq的几件小事如何保证消息不重复消费

1.幂等性幂等(idempotent、idempotence)是一个数学与计算机学概念,常见于抽象代数中。在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数,或幂等方法,是指可以使用相同参数重复... 查看详情

关于mq的几件小事如何保证消息队列的高可用

1.RabbitMQ的高可用RabbitMQ基于主从模式实现高可用。RabbitMQ有三种模式:单机模式,普通集群模式,镜像集群模式。(1)单机模式:单机模式就是demo级别的,生产中不会有人使用。(2)普通集群模式普通集群模式就是在多台机器... 查看详情

[转]rabbitmq消息如何保证100%的投递成功

投递主要针对生产端,什么是生产端的可靠性投递?保障消息成功的发出去保证MQ节点成功收到消息发送端收到MQ的确认应答完善的消息补偿机制,只做前三步的时候,也许生产端就失败了BAT/TMD互联网大厂解决方案,看具体业务... 查看详情

到底什么时候该使用mq?

...微服务?》)。 最近分享了几篇MQ相关的文章:《MQ如何实现延时消息》《MQ如何实现消息必达》《MQ如何实现幂等性》不少网友询问,究竟什么时候使用MQ,MQ究竟适合什么场景,故有了此文。 二、MQ是干嘛的消息总线(M... 查看详情

IBM MQ 的保证交付如何运作

】IBMMQ的保证交付如何运作【英文标题】:HowdoesIBMMQ\'sguaranteeddeliverywork【发布时间】:2021-06-0714:42:46【问题描述】:假设2个银行系统(假设它们是A和B)使用IBMMQ通过发送消息来相互通信,假设一个场景是RecordA在A处,RecordB在B处... 查看详情

如何保证消息队列里的数据顺序执行?

使用MQ的时候,经常会有按顺序消费的需求,比如大数据团队为了做数据分析,会把数据库里数据同步到其他系统做一些数据统计分析。同步MySQL的时候,为了保证数据同步的实时性,会在中间加一个MQ,多... 查看详情