23.rabbitmq幂等性

介绍

用户对同一操作发起的一次请求或多次请求的结果是一致的。

方式用户重复提交。

也就是消息被重复消费了。

消费者在消费mq中的消息时,mq已经把消息发送给消费者,消费者在给mq返回ack时网络中断,故mq未收到确认消息,该条消息会重新发给其他消费者,或者在网络重连后再次发送给该消费者,但实际上该消费者已经成功消费了该条消息,造成消费者消费了重复的消息。

解决思路

一般使用全局id,或者写一个唯一标识比如:时间戳, UUID, 按自己的规则生成一个全局唯一id。每次消费消息时用该id判断该消息是否被消费过。

消费端的幂等性保证

在海量订单生成的业务高峰期,生产端有可能会重复发生了消息,这时候消费端就要实现幂等性,这就意味着我们的消息永远不会被重复消费多次,即使我们收到了一样的消息。

业界主流的幂等性操作有两种:

1.唯一Id+指纹码机制。

指纹码:我们的一些规则或者时间戳加别的服务给到的唯一信息码,它并不一定是我们系统生成的,基本是我们的业务规则拼接而来,但是一定保证唯一性,然后利用查询语句进行判断这个id是否存在于数据库中,优点就是实现简单的一个拼接,然后查询判断是否重复。缺点是在高并发时,如果是单个数据库就会有写入性能瓶颈,当然可以采用分库分表提升性能,但也不是最佳的推荐方式。

2.利用redis的原子性去实现。

利用redis的setnx命令,天然具有幂等性,从而实现不重复消费。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/51478.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python面试题:结合Python技术,如何使用SQLAlchemy进行数据库操作

使用SQLAlchemy进行数据库操作是一种非常灵活和强大的方式,它支持多种关系型数据库,并提供了ORM(对象关系映射)和核心(SQL Expression Language)两种使用方法。以下是详细的步骤和示例,展示如何…

虚拟机Ubuntu20.04 利用串口调试机械臂

虚拟机Ubuntu20.04 利用串口调试机械臂 串口库问题 由于机械臂使用的是串口进行驱动控制,在python中相关的串口库为serial和pyserial两个,这里我曾踩过雷同时安装了serial与pyserial两个库,导致报错如下所示: AttributeError: m…

数据结构:(1)线性表

一、基本概念 概念:零个或多个数据元素的有限序列 元素之间是有顺序了。如果存在多个元素,第一个元素无前驱,最后一个没有后继,其他的元素只有一个前驱和一个后继。 当线性表元素的个数n(n>0&am…

c++中grpc简单使用---函数介绍及其代码演示

前言 C gRPC(Google Remote Procedure Call)是一种高性能、开源的远程过程调用框架,用于在不同服务之间进行通信。 配置gRPC可以访问该网站:grpc配置 一.函数介绍 下面是一些常见的 C gRPC 函数及其功能: grpc::Cha…

Centos的YUM源

可以使用以下几个常见的YUM源,这些源通常具有较快的速度和较高的可用性: 阿里云 (Aliyun) [aliyun] nameAliyun mirrors baseurlhttp://mirrors.aliyun.com/centos/$releasever/os/$basearch/ gpgcheck1 gpgkeyhttp://mirrors.aliyun.com/centos/RPM-GPG…

使用Spring Boot与Spire.Doc实现Word文档的多样化操作

​ 博客主页: 南来_北往 系列专栏:Spring Boot实战 前言 使用Spring Boot与Spire.Doc实现Word文档的多样化操作具有以下优势: 强大的功能组合:Spring Boot提供了快速构建独立和生产级的Spring应用程序的能力,而Spire.Doc则…

【Golang 面试 - 进阶题】每日 3 题(二)

✍个人博客:Pandaconda-CSDN博客 📣专栏地址:http://t.csdnimg.cn/UWz06 📚专栏简介:在这个专栏中,我将会分享 Golang 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞👍收藏…

【Docker】搭建实用的内网穿透工具 - FRP

前言 本教程基于群晖的NAS设备DS423+的docker功能进行搭建FRP的客户端,DSM版本为 7.2.1-69057 Update 5。采用香港机Debian 12系统的服务器来安装FRP的服务端作为演示。 服务器购买地址:https://www.crash.work/aff/AQXGDNKY 简介 FRP(Fast Reverse Proxy)是一个高性能…

OSError: You are trying to access a gated repo.解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

『 Linux 』用户态与内核态的转换机制及信号检测时机

文章目录 用户态与内核态进程地址空间操作系统的本质 信号的处理时机 用户态与内核态 进程在执行代码的过程中代码必定涉及用户代码,库函数代码及操作系统内核代码; 以简单的printf()函数为例,该函数必定为先执行用户的代码即知道需要调用printf()函数,再执行库(如libc)中的代码…

这六种灯千万别买了!看你踩了几个坑

雅静说啥样的灯买了才发现是个坑      给你说6个,安上就会后悔的      1,这些变色的灯就别要了,说的是三色温灯,买回家才发现      它的白光,暖光,中性光,我们习惯只用一种,开,关,开,关,开5次      才能调到自己想要的档位,不想患上关节炎就别买这种了     …

Java线程同步与通信:wait(), notify(), notifyAll(), sleep()

Java线程同步与通信:wait(), notify(), notifyAll(), sleep() 1. wait()2. notify()3. notifyAll()4. sleep()4、总结 💖The Begin💖点点关注&…

一文带你读懂TCP

文章目录 1 TCP协议1.1 TCP 基础1.1.1 TCP 特性1.2.2 TCP连接数 1.2 TCP 头1.2.1 TCP 头格式1.2.2 MTU,MSS,分片传输 1.3 TCP 连接三路握手1.4 TCP 断开四次挥手1.5 SYN攻击和防范1.6 重传机制1.6.1 超时重传1.6.2 快速重传1.6.3 SACK 1.7 滑动窗口1.8 流…

微信小程序根据动态权限展示tabbar

微信小程序自定义 TabBar 后根据权限动态展示tabbar 在微信小程序开发中,自定义 TabBar 可以让应用更具灵活性和个性化。特别是在用户根据不同权限展示不同的 TabBar 内容时,正确的实现方法能够提升用户体验。本篇文章将分享如何使用事件总线实现权限变动时动态更新自定义 T…

软件环境安装-通过Docker安装rabbitmq

软件环境安装-通过Docker安装rabbitmq 一、拉取镜像二、启动三、安装延迟队列插件 一、拉取镜像 docker pull rabbitmq:3.9.0-management二、启动 docker run -d --namerabbitmq --restartalways -p 5672:5672 -p 15672:15672 rabbitmq:3.9.0-management 三、安装延迟队列插…

Linux基础复习(二)

前言 本文介绍了一下Linux命令行基本操作及网络配置 一、 命令行提示含义 [当前用户主机名 工作目录]$ 若当前用户是root,则最后一个字符为# 否则,最后一个字符为$ 二、常用Linux命令及其解释 修改主机名 一般在创建一台主机后会使用hostname相关命…

在生信分析中大家需要特别注意的事情​

在生信分析中大家需要特别注意的事情 标准的软件使用和数据分析流程 1. 先看我的b站教学视频 2. 先从我的百度网盘把演示数据集下载下来,先把要运行的模块的演示数据集先运行一遍 3. 前两步都做完了,演示数据集也运行成功了,并且知道了软件…

服务器构建私有npm库(Docker + Verdaccio)

npm官网有时候因为网络原因包推不上去,那就简单构建个私有库 私有库不会被共享,且配置不需要太高1h2G就行 1.需要安装Docker,这个跳过了 2.生成配置文件 mkdir /home/verdaccio cd /home/verdaccio mkdir conf && mkdir storage &am…

ajax请求成功但不执行success-function回调函数

目录 一、问题分析 二、处理问题 一、问题分析 在测试员工管理系统的登录和注册代码时,登录一切正常,就是注册成功后没有跳转页面,后面发现是success-function回调函数没有正常执行。原因主要是前端和后端交流的数据格式不一致,…

【C++BFS算法 二分查找】2812. 找出最安全路径

本文涉及知识点 CBFS算法 C二分查找 LeetCode2812. 找出最安全路径 给你一个下标从 0 开始、大小为 n x n 的二维矩阵 grid ,其中 (r, c) 表示: 如果 grid[r][c] 1 ,则表示一个存在小偷的单元格 如果 grid[r][c] 0 ,则表示一…