首页 > 其他分享 >RabbitMQ---如何保证MQ幂等性?

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

时间:2024-11-25 09:33:26浏览次数:7  
标签:消费 消费者 数据库 布隆 RabbitMQ --- MQ 消息 过滤器

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

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

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

2、使用token机制

image.png

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

如果是direct模式:

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

如果是topic或者广播模式:

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

3、使用布隆过滤器

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

标签:消费,消费者,数据库,布隆,RabbitMQ,---,MQ,消息,过滤器
From: https://blog.csdn.net/weixin_73205368/article/details/143908520

相关文章

  • 计算机基础---Cookie、Session、Token的区别
    CookieCookie是一种存储在用户浏览器中的小型文本文件,用于保存用户信息和偏好。主要用于记住用户的登录状态、购物车内容、用户偏好等。以加入购物车为例,每次浏览器请求后server都会将本次商品id存储在Cookie中返回给客户端,客户端会将Cookie保存在本地,下一次再将......
  • 说说你对min-width和max-width的理解,它们有什么运用场景?
    min-width和max-width是CSS属性,用于控制元素的最小和最大宽度。它们在响应式网页设计中非常重要,可以确保元素在不同屏幕尺寸下都能良好地显示。min-width(最小宽度):定义:指定元素内容区域的最小宽度。即使内容较少,元素的宽度也不会小于min-width的值。作用:避免元......
  • Spring---Bean的生命周期
    什么是Bean的生命周期Bean的生命周期就是:对象从创建开始到最终销毁的整个过程,Bean对象从创建到销毁中经历了哪些过程什么时候创建Bean对象?创建Bean对象的前后会调用什么方法?Bean对象什么时候销毁?Bean对象的销毁前后调用什么方法?Spring其实就是一个管理Bean对象的工厂,它负......
  • python-爬虫入门指南
    前言:由于个人负责的运维组,其中有个同事每回在某个项目发版更新后,需手动在k8s容器平台web界面上复制出几百个微服务的名称以及镜像版本等信息,用来更新微服务清单,个人决定抽时间写个爬虫脚本自动完成手动执行的任务。由于公司信息需保密,这里介绍个简单入门的爬虫脚本做为范例......
  • HarmonyOs DevEco Studio小技巧34--鸿蒙应用架构设计 MVVM模式与三层架构、工程目录迁
    MVVM模式ArkUI采取MVVM=Model+View+ViewModel模式,其中状态管理模块起到的就是ViewModel的作用,将数据与视图绑定在一起,更新数据的时候直接更新视图。在MVVM模式中:Model(模型):model文件夹用于存储数据模型。它表示组件或其他相关业务逻辑之间传输的数据,是对原始数据的......
  • OpenCV-Python 特征匹配
    37.1Brute-Force匹配的基础蛮力匹配器是很简单的。首先在第一幅图像中选取一个关键点然后依次与第二幅图像的每个关键点进行(描述符)距离测试,最后返回距离最近的关键点。对于BF匹配器,我们首先要使用cv2.BFMatcher()创建一个BFMatcher对象。它有两个可选参数。第......
  • # 学期(如2024-2025-1) 学号(如:20241402) 《计算机基础与程序设计》第10周学习总结
    学期(如2024-2025-1)学号(如:20241402)《计算机基础与程序设计》第10周学习总结作业信息这个作业属于哪个课程<班级的链接>(如2024-2025-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(如2024-2025-1计算机基础与程序设计第一周作业)这个作业的目标<写上......
  • 请举例说明伪元素 (pseudo-elements) 有哪些用途?
    伪元素在前端开发中用途广泛,以下是一些常见的例子:1.样式化特定内容:::before和::after可以用来插入生成的内容,例如图标、计数器、引号等。.quote::before{content:open-quote;}.quote::after{content:close-quote;}::first-letter可以用来样式化第一......
  • 2024/11/30--阅读笔记|人月神话————画蛇添足
    画蛇添足——蛇本来没有脚,先画成蛇的人,却将蛇添了脚,结果不成为蛇。蛇本来没有脚却被人给它强行加上脚,比喻做事多此一举,反而坏事。我们在成功来临的时候,要保持和巩固现有的成果,不能多次一举,耍小聪明、炫耀自己,否则就会惨败。自作聪明、做多余的事,反而会弄巧成拙,把事情办糟。......
  • Figma入门-文字、样式、链接、动作
    Figma入门-文字、样式、链接、动作前言在之前的工作中,大家的原型图都是使用Axure制作的,印象中Figma一直是个专业设计软件。最近,很多产品朋友告诉我,很多原型图都开始用Figma制作了,并且很多组件都是内置的,对各种原型图的制作及其友好,只需熟悉一下基本的操作即可上手。......