RabbitMQ-其他问题

news2024/11/14 19:55:28
  一、幂等性

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

       解决方案:给消息生成一个全局唯一id,每次消费时判断该消息是否被消费过。

       业界主流的两种方式:唯一ID+指纹码机制;利用redis原子性实现

        唯一ID+指纹码机制

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

       Redis原子性

       利用Redis执行setnx命令,天然就有幂等性操作,从而实现不重复消费

  二、优先级队列

       使用场景:订单催付

       区间范围:0-255 越大优先级越高

       实现:

     代码:

     对列中添加代码优先级

Map<String, Object> arguments = new HashMap<>();
arguments.put("x-max-priority",10);
return QueueBuilder.durable("queue1").withArguments(arguments).build();

      消息中添加代码优先级

msg.getMessageProperties().setPriority(5);

     注意:必须队列和消息同时设置优先级才可以

    三、惰性队列

          惰性队列:消息保存在磁盘上

          使用场景:消费者下线,宕机或者由于维护而关闭而致使长时间内不能消费消息造成消息堆积时使用

         两种模式:default和lazy

         声明方式:

         代码

Map<String,Object> arguments = new HashMap<>();
arguments.put("x-queue-mode","lazy");
channel.queueDeclare("myqueue",false,false,false,arguments);

        界面设置

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

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

相关文章

第三章虚拟机的克隆,快照,迁移删除

1.虚拟机的克隆 如果你已经安装了一台linux操作系统&#xff0c;你还想再更多的&#xff0c;没有必要再重新安装&#xff0c;你只需要克 隆就可以&#xff0c;看演示。 方式1&#xff0c;直接拷贝一份安装好的虚拟机文件,再用虚拟机打开这个文件方式2&#xff0c;使用vmware的…

企业三要素核验API接口,你了解多少?

企业三要素核验API接口是指哪些要素&#xff1f;企业三要素是一种有关企业实名认证的应用程序接口也称API&#xff0c;企业的名称、统一社会信用代码和法人代表姓名统称企业三要素。企业三要素核验API接口的资源来自国家工商总局数据库&#xff0c;通过数据库资料三个要素进行核…

字母板上的路径 题解,力扣官方出来挨打(小声)

字母板上的路径 我们从一块字母板上的位置 (0, 0) 出发&#xff0c;该坐标对应的字符为 board[0][0]。 在本题里&#xff0c;字母板为board [“abcde”, “fghij”, “klmno”, “pqrst”, “uvwxy”, “z”]&#xff0c;如下所示。 我们可以按下面的指令规则行动&#xff1a…

Dubbo基本原理和用法讲解

Dubbo基本原理和用法讲解 序言&#xff1a;学习一项新技术&#xff0c;一般从是什么、为什么、怎么用三个方面进行学习。本篇文章也不例外&#xff0c;笔者将从Dubbo是什么&#xff1f;、为什么会产生Dubbo技术&#xff1f;、如何在项目中使用Dubbo技术。最后&#xff0c;笔者…

基于springboot+vue的宠物商城系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

Fluent Python 笔记 第 6 章 使用一等函数实现设计模式

虽然设计模式与语言无关&#xff0c;但这并不意味着每一个模式都能在每一门语言中使用。1996 年&#xff0c;Peter Norvig 在题为“Design Patterns in Dynamic Languages”(http://norvig.com/design- patterns/)的演讲中指出&#xff0c;Gamma 等人合著的《设计模式:可复用面…

序列化和反序列化~如何实现自定义协议?jsoncpp的使用

目录 序列化反序列化的概念 为什么要进行序列化和反序列化&#xff1f; 自定义协议实现业务 jsoncpp实现序列化和反序列化 序列化&#xff1a; 反序列化&#xff1a; 自定义协议jsoncpp实现简易计算器服务整体逻辑 Server.cc Client.cc 运行结果 序列化反序列化的概念…

重建control遗漏数据文件,reseltogs报ORA-1555错误处理----惜分飞

又一客户,误删除oracle redo导致数据库无法正常启动,自己尝试重建ctl,结果遗漏部分oracle数据文件并且尝试过resetlogs,导致部分文件resetlogs scn不一致.导致重建ctl失败Fri Feb 10 12:41:20 2023CREATE CONTROLFILE REUSE DATABASE "orcl"RESETLOGS NOARCHIVELOG M…

GO 中的 init 函数

前言 go 语言中有一个非常神奇的函数 init ,它可以在所有程序执行开始前被执行&#xff0c;并且每个 package 下面可以存在多个 init 函数&#xff0c;我们一起来看看这个奇怪的 init 函数。 init 特性 init 函数在 main 函数之前执行&#xff0c;并且是自动执行&#xff1b…

Docker网络实现原理

目录 1 Docker网络实现原理 1.2 为容器创建端口映射 方法一&#xff1a;随机映射端口&#xff08;从32768开始&#xff09; 方法二&#xff1a;指定映射端口 1.3 查看容器的输出和日志信息 二 Docker的网络模式 2.1 Docker的网络模式&#xff08;41&#xff09; 2.2 查看…

【大数据趋势】2月12日 货币发动机牵着港股和A股走,历史不会简单重演,但是会用类似的方法让人再踏入同一条河流

行情核心源头之一 : 离岸人民币和美元趋势历史对比&#xff0c;预示着一个阶段底部正在形成中 历史总是很容易忘记&#xff0c;应该很少有人记得18年发生了什么。还是让大数据程序来对比一下。【红色标记1】RSI预示着價格強度的动能情况&#xff0c;同样是达到了一个高点&…

2021 WAIC 世界人工智能大会参会总结

前言 2021 年世界人工智能大会&#xff08;WAIC&#xff09;于2021年7月7日至10日在上海世博展览馆举办&#xff0c;本届大会继续秉持「智联世界」的理念&#xff0c;以「众智成城」为主题&#xff0c;促进全球人工智能创新思想、技术、应用、人才和资本的集聚和交流&#xff…

JS逆向案例分享----prototype的妙用

方向不对&#xff0c;努力白费。爬虫也是如此。今天分享的案例很能说明问题。目标&#xff1a;某集团公司采购信息aHR0cHM6Ly9lYy5taW5tZXRhbHMuY29tLmNuL29wZW4vaG9tZS9wdXJjaGFzZS1pbmZv浏览器抓包&#xff0c;请求载荷里就一个加密参数param全局搜索“param:”&#xff0c;有…

【计组】DMA、数据完整性--《深入浅出计算机组成原理》(十三)

目录 一、DMA &#xff08;一&#xff09;理解DMA&#xff0c;一个协处理器 &#xff08;二&#xff09; Kafka 的实现原理 二、数据的完整性 &#xff08;一&#xff09;单比特翻转&#xff1a;软件解决不了的硬件错误 &#xff08;二&#xff09;海明码 1、海明码的纠错…

《狂飙》壁纸大嫂如此惊艳,做成日历壁纸天天看(7)

小朋友们好&#xff0c;大朋友们好&#xff01;我是猫妹&#xff01;话说兔年春节期间&#xff0c;一部反黑反腐电视剧横空出世&#xff0c;收视率和口碑都有不错的成绩&#xff01;这部电视剧叫《狂飙》&#xff01;你看了吗&#xff1f;我没看&#xff01;不过这丝毫不影响它…

C语言fread和fwrite的用法详解

fgets() 有局限性&#xff0c;每次最多只能从文件中读取一行内容&#xff0c;因为 fgets() 遇到换行符就结束读取。如果希望读取多行内容&#xff0c;需要使用 fread() 函数&#xff1b;相应地写入函数为 fwrite()。对于 Windows 系统&#xff0c;使用 fread() 和 fwrite() 时应…

Python+OpenCV 简单实现人脸检测多个和人脸识别 2(附代码)

如果dilb和face_recognition第三方包安装失败&#xff0c;请移步到Python 解决dilb和face_recognition第三方包安装失败_水w的博客-CSDN博客 上篇请移步到Pythondilb 简单实现人脸检测&#xff08;附代码&#xff09;_水w的博客-CSDN博客 本篇是在上篇的工作基础上进行的。 目…

k8s之apiserver

1、Kube-APIServer 启动APIServer 启动采用 Cobra 命令行&#xff0c;解析相关 flags 参数&#xff0c;经过 Complete(填充默认值)->Validate(校验) 逻辑后&#xff0c;通过 Run 启动服务。在 Run 函数中&#xff0c;按序分别初始化 APIServer 链(APIExtensionsServer、Kube…

【Java开发笔记】分库分表

【Java开发笔记】分库分表 1 分库分表基本概述 为什么要分库分表&#xff1f; 【性能角度】分库分表就是为了解决由于数据量多大而导致数据库性能下降的问题&#xff1a; 原来独立的数据库拆分成若干数据库组成将原来的大表&#xff08;存储近千万数据&#xff09;拆分为若干…

利用git reflog 命令来查看历史提交记录,并使用提交记录恢复已经被删除掉的分支

一.问题描述 当我们在操作中手误删除了某个分支&#xff0c;那该分支中提交的内容也没有了&#xff0c;我们可以利用git reflog这个命令来查看历史提交的记录从而恢复被删除的分支和提交的内容 二.模拟问题 1.创建git仓库&#xff0c;并提交一个文件 [rootcentos7-temp /da…