码迷,mamicode.com
首页 > 其他好文 > 详细

奇怪的汉诺塔

时间:2020-08-09 13:09:20      阅读:71      评论:0      收藏:0      [点我收藏+]

标签:tps   col   标签   代码   color   out   bsp   memset   int   

一 重复消息

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

1.1 生产时消息重复

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

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

1.2消费时消息重复

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

 

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

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

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

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

奇怪的汉诺塔

标签:tps   col   标签   代码   color   out   bsp   memset   int   

原文地址:https://www.cnblogs.com/realxjr/p/13462098.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!