RabbitMQ消息防重和幂等

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: RabbitMQ消息防重和幂等

消息防重和幂等

当同一消息被重复投递或消费时,能保证消息消费的幂等性。那什么是防重与幂等呢?

防重:保证相同的消息只最多只执行一次 。

幂等:保证相同的消息,每次执行时结果相同。

为什么需要做消息的防重或幂等

  1. 主流的消息中间件都只保证消息最少被投递一次,不保证只投递一次。
  2. 消息发送时重复发送。当消息已被服务器持久化,但因网络闪断、服务器宕机等原因导致消息生产者认为消息发送失败,尝试再次发送消息。
  3. 中间件投递消息时重复投递消息中间件在对集群做缩、扩容时触发Rebalance,消费者可能收到重复消息 网络闪断、客户端重启时消息中间件在网络恢复后,会对消息尝试重新投递。

常见解决方案

  1. 通过数据库唯一索引防重: 可使用消息的id或业务id做为数据库中表的主键或唯一索引,通过数据库进行防重。
  2. 通过redis防重: 使用消息的id或业务id作为redis的防重key,通过redis防重。

  1. 通过业务状态控制做到消费幂等。 通过在sql语句中加入状态过滤条件,只执行指定状态的sql语句,达到幂等性。
  2. 使用redis防重时,由于redis与数据库之间可能 存在状态不一致,无法做到绝对的防重。如对防重 要求高,可使用数据库进行防重。
相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
6月前
|
消息中间件 存储 NoSQL
RabbitMQ的幂等性、优先级队列和惰性队列
【1月更文挑战第12天】用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。举个最简单的例子,那就是支付,用户购买商品后支付,支付扣款成功,但是返回结果的时候网络异常,此时钱已经扣了,用户再次点击按钮,此时会进行第二次扣款,返回结果成功,用户查询余额发现多扣钱了,流水记录也变成了两条。在以前的单应用系统中,我们只需要把数据操作放入事务中即可,发生错误立即回滚,但是再响应客户端的时候也有可能出现网络中断或者异常等等
281 7
|
6月前
|
消息中间件 存储 NoSQL
RabbitMQ的幂等性、优先级队列和惰性队列
**摘要:** 本文讨论了RabbitMQ中的幂等性、优先级队列和惰性队列。幂等性确保了重复请求不会导致副作用,关键在于消费端的幂等性保障,如使用唯一ID和Redis的原子性操作。优先级队列适用于处理不同重要性消息,如大客户订单优先处理,通过设置`x-max-priority`属性实现。惰性队列自3.6.0版起提供,用于延迟将消息加载到内存,适合大量消息存储和消费者延迟消费的场景。
88 4
|
消息中间件
消息中间件系列教程(15) -RabbitMQ-基于全局消息ID解决幂等性问题
消息中间件系列教程(15) -RabbitMQ-基于全局消息ID解决幂等性问题
105 0
|
6月前
|
消息中间件 存储 NoSQL
【RabbitMQ教程】第八章 —— RabbitMQ - 幂等性、优先级、惰性
【RabbitMQ教程】第八章 —— RabbitMQ - 幂等性、优先级、惰性
|
消息中间件 存储 JSON
RabbitMQ之幂等性问题处理
RabbitMQ之幂等性问题处理
|
消息中间件 存储 NoSQL
RabbitMQ如何保证消息不被重复消费?使用Redis做幂等是完全安全的吗?
RabbitMQ如何保证消息不被重复消费?使用Redis做幂等是完全安全的吗?
1078 0
|
消息中间件 Java 数据库
RabbitMQ:第二章:Spring整合RabbitMQ(简单模式,广播模式,路由模式,通配符模式,消息可靠性投递,防止消息丢失,TTL,死信队列,延迟队列,消息积压,消息幂等性)
RabbitMQ:第二章:Spring整合RabbitMQ(简单模式,广播模式,路由模式,通配符模式,消息可靠性投递,防止消息丢失,TTL,死信队列,延迟队列,消息积压,消息幂等性)
381 0
RabbitMQ:第二章:Spring整合RabbitMQ(简单模式,广播模式,路由模式,通配符模式,消息可靠性投递,防止消息丢失,TTL,死信队列,延迟队列,消息积压,消息幂等性)
|
消息中间件 存储 NoSQL
RabbitMQ幂等性&优先级队列&惰性对列
RabbitMQ幂等性&优先级队列&惰性对列
110 0
|
消息中间件 存储 NoSQL
RabbitMQ学习(十):幂等性、优先级队列、惰性队列
以支付为例,用户购买商品后支付,扣款成功,但是返回结果的时候网络异常, 此时钱已经扣了;用户再次点击按钮,此时会进行第二次扣款,返回结果成功,用户查询余额发现多扣钱 了,流水记录也变成了两条。在以前的单应用系统中,我们只需要把数据操作放入事务中即可,发生错误 立即回滚,但是再响应客户端的时候也有可能出现网络中断或者异常等。
211 0
|
消息中间件 存储 NoSQL
RabbitMQ如何保证消息不被重复消费(幂等性问题详解)
案例讲解RabbitMQ如何保证消息不被重复消费!
1014 0
RabbitMQ如何保证消息不被重复消费(幂等性问题详解)