RabbitMQ---如何保证MQ幂等性?

保证MQ幂等性通常是指保证消费者消费消息的幂等性。

1、使用数据库的唯一约束去控制。

添加唯一索引保证添加数据的幂等性。例如,对于订单处理场景,将订单号设置为唯一约束。当重复插入具有相同订单号的订单记录时,数据库会抛出异常,从而保证幂等性

2、使用token机制

总结:发送消息时给消息指定一个唯一的ID,发送消息时将消息ID写入Redis,消费时根据消息ID查询Redis判断是否已经消费,如果已经消费则不再消费。

如果是direct模式:

一个队列对应一个消费者,那不存在重复消费的问题;如果是一个队列对应多个消费者,那消费者会通过轮询来消费,也不会存在重复消费的问题;

如果是topic或者广播模式:

一个队列对应了多个消费者,且消费者会同时收到消息,那就会出现重复消费的问题,如果我们不希望出现重复消费,我们可以给消息加一个唯一id,i到red.png](https://img-blog.csdnimg.cn/img_convert/fc4db340f2555faef0d59f0ed03e0消息消费成功后就,当字符加过redis里面去这里我们可以用red的set类型,然后每次消费之前先看看redis里面有没有该id;

3、使用布隆过滤器

拿到一个消息之后在布隆过滤器中进行判断,如果存在,就不消费;如果不存在,就映射到布隆过滤器中,因为布隆过滤器存在误判的可能性,所以我个人认为可以结合数据库约束来配合使用,即布隆过滤器误判的消息给到数据库,因为误判的消息总量是很小的,所以不会给数据库带来太大的压力。所以布隆过滤器结合数据库约束可以保证消息的幂等性

相关推荐
老虎06276 小时前
RabbitMQ(RabbitMQ的消息收发的模板工具:SpringAMQP)
分布式·rabbitmq·ruby
JIngJaneIL6 小时前
基于Java在线考试管理系统(源码+数据库+文档)
java·开发语言·数据库·vue.js·spring boot
雨落秋垣6 小时前
SpringCache 缓存:注意事项、问题解决与优化策略
java·spring·缓存
听风吟丶6 小时前
分布式追踪实战:SkyWalking 构建微服务全链路可观测性体系
分布式·微服务·skywalking
计算机毕设指导66 小时前
基于微信小程序的篮球场馆预订系统【源码文末联系】
java·spring boot·mysql·微信小程序·小程序·tomcat·maven
JIngJaneIL6 小时前
基于Java音乐管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot
毕设源码-朱学姐6 小时前
【开题答辩全过程】以 驾校信息管理系统为例,包含答辩的问题和答案
java·spring boot
Hello.Reader6 小时前
Flink SQL 窗口表值函数TUMBLE / HOP / CUMULATE / SESSION
java·sql·flink
想不明白的过度思考者6 小时前
Spring IoC 与 DI 深度剖析:从“控制反转”到 Bean 的集中管理
java·spring·ioc·di
南河的南6 小时前
解决IDEA无法下载Maven仓库的源码
java·maven·intellij-idea