奇怪的汉诺塔

Posted realxjr

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了奇怪的汉诺塔相关的知识,希望对你有一定的参考价值。

一 重复消息

为什么会出现消息重复?消息重复的原因有两个:1.生产时消息重复,2.消费时消息重复。

1.1 生产时消息重复

由于生产者发送消息给MQ,在MQ确认的时候出现了网络波动,生产者没有收到确认,实际上MQ已经接收到了消息。这时候生产者就会重新发送一遍这条消息。

生产者中如果消息未被确认,或确认失败,我们可以使用定时任务+(redis/db)来进行消息重试。

1.2消费时消息重复

消费者消费成功后,再给MQ确认的时候出现了网络波动,MQ没有接收到确认,为了保证消息被消费,MQ就会继续给消费者投递之前的消息。这时候消费者就接收到了两条一样的消息。

 

如何保证MQ的消费是幂等性的,需要结合具体的业务来看  :

  比如你拿个数据要写库,你先根据主键查一下,如果这数据都有了(最好带有时间戳字段,每次更新都以时间戳为条件),你就别插入了,update一下好吧 

  比如你是写redis,那没问题了,反正每次都是set,天然幂等性  

  比如你不是上面两个场景,那做的稍微复杂一点,你需要让生产者发送每条数据的时候,里面加一个全局唯一的id,类似订单id之类的东西,然后你这里消费到了之后,先根据这个id去比如redis里查一下,之前消费过吗?如果没有消费过,你就处理,然后这个id写redis。如果消费过了,那你就别处理了,保证别重复处理相同的消息即可。  

以上是关于奇怪的汉诺塔的主要内容,如果未能解决你的问题,请参考以下文章

96. 奇怪的汉诺塔递推

《算法竞赛进阶指南》-AcWing-96. 奇怪的汉诺塔-题解

《算法竞赛进阶指南》-AcWing-96. 奇怪的汉诺塔-题解

AcWing - 96 - 奇怪的汉诺塔 = dp

奇怪的汉诺塔

96. 奇怪的汉诺塔