首页 > 其他分享 >rabbitMQ如何避免重复消费

rabbitMQ如何避免重复消费

时间:2022-11-02 08:57:23浏览次数:47  
标签:消费 重复 db 确认 rabbitMQ 避免 MQ 消息

 

一、 为什么会出现消息重复?
消息重复的原因有两个:1.生产时消息重复,2.消费时消息重复。
1.1 生产时消息重复
由于生产者发送消息给MQ,在MQ确认的时候出现了网络波动,生产者没有收到确认,实际上MQ已经接收到了消息。这时候生产者就会重新发送一遍这条消息。

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

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

由于重复消息是由于网络原因造成的,因此不可避免重复消息。但是我们需要保证消息的幂等性。

二 、如何保证消息幂等性
让每个消息携带一个全局的唯一ID,即可保证消息的幂等性,具体消费过程为:

消费者获取到消息后先根据id去查询redis/db是否存在该消息
如果不存在,则正常消费,消费完毕后写入redis/db
如果存在,则证明消息被消费过,直接丢弃

原文链接:https://blog.csdn.net/sangjunhong/article/details/124147579

标签:消费,重复,db,确认,rabbitMQ,避免,MQ,消息
From: https://www.cnblogs.com/wugh8726254/p/16849822.html

相关文章

  • RabbitMQ
    RabbitMQ一、MQ1.同步调用的优缺点同步调用的优点:时效性较强,可以立即得到结果同步调用的问题:耦合度高性能和吞吐能力下降有额外的资源消耗有级联失败问题2.......
  • 217. 存在重复元素
    给你一个整数数组nums。如果任一值在数组中出现至少两次,返回true;如果数组中每个元素互不相同,返回false。示例1:输入:nums=[1,2,3,1]输出:true示例2:输入:nums=......
  • 如何解决何避免多个C/C++动态库函数同名冲突
    前言现在的开发节奏越来越快,有大量现成的库来方便我们的开发者来使用,避免重复造轮子,而且有很多有生命力的开源社区。当然在使用过程中,你可能为这样的场景而头痛:你的项目中用......
  • 解决vue-router@3重复添加路由导致的控制台警告
    vue项目的权限限制功能,有一种实现方案是这样的进入项目只设置没有权限要求的路由向后台提供当前用户的权限后台根据用户权限,返回该用户可以用的路由信息将路由......
  • 数据库事务 脏读 幻读 不可重复读
    总结:脏读:读取事务未提交的修改之后的数据。幻读:读取事务未提交的 增删之后的数据。不可重复读:多次读取事务已经提交的数据。一、什么是数据库事务数据库事务(......
  • 三 docker安装rabbitMQ之springboot集成stomp,实现前端主动刷新
    一 场景分析对于一些需要数据同步的场景中,例如后台数据有变化,需要程序主动刷新前端界面的数据显示,这样能提供更好的用户数据交互,能第一时间了解到资源信息的变化,而不是......
  • Excel重复的操作自动化,学会了,你就是大神
    Hi,大家好,本专栏将会从零开始和大家用图文的方式,让你从零基础学会VBA!有兴趣的小伙伴可以持续关注我,或者在专栏进行查看学习,愿与君携手共进!在上一章节相信大家已经学会使用判......
  • 游戏服务器架构:如何避免缓存积累延迟
    不管使用TCP还是KCP,你都不可能超越信道限制的发送数据。TCP的发送窗口SNDBUF决定了最多可以同时发送多少数据,KCP的也一样。当前发送且没有得到ACK/UNA确认的数据,都会......
  • 解决表单重复提交问题
    分享知识传递快乐 防止表单重复提交有多种,经常用到的有两种: 一种是Token(令牌),这种可以用于from表单,但用于ajax就有点力不从心了;另一种是对请求的url和参数验证,如果一样就......
  • 26. 删除有序数组中的重复项
    给你一个升序排列的数组nums,请你原地删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度。元素的相对顺序应该保持一致。由于在某些语言中不能改......