RabbitMQ(高阶使用)死信队列

文章内容是学习过程中的知识总结,如有纰漏,欢迎指正

文章目录

一、什么是死信队列?

二、死信队列使用场景

三、死信队列如何使用

四、打车超时处理

 1.打车超时实现


以下是本篇文章正文内容

一、什么是死信队列?

        先从概念解释上搞清楚这个定义,死信,顾名思义就是无法被消费的消息,字面意思可以这样理解

        一般来说,producer将消息投递到broker或者直接到queue里了,consumer从queue取出消息进行消费,但某些时候由于特定的原因导致queue中的某些消息无法被消费,这样的消息如果没有后续的处理,就变成了死信,有死信,自然就有了死信队列;

二、死信队列使用场景

RabbitMQ中的死信交换器(dead letter exchange)可以接收下面三种场景中的消息:

  • 消费者对消息使用了basicReject或者basicNack回复,并且requeue参数设置为false,即不再将该消息重新在消费者间进行投递
  • 消息在队列中超时,RabbitMQ可以在单个消息或者队列中设置TTL(最大存活时间)属性
  • 队列中的消息已经超过其设置的最大消息个数

三、死信队列如何使用

        死信交换器不是默认的设置,这里是被投递消息被拒绝后的一个可选行为,是在创建队列的时进行声明的,往往用在对问题消息的诊断上。

        死信交换器仍然只是一个普通的交换器,创建时并没有特别要求和操作,在创建队列的时候,声明该交换器将用作保存被拒绝的消息即可,相关的参数是x-dead-letter-exchange。     

   相关代码

@Bean
public Queue taxiOverQueue() {Map<String, Object> args = new HashMap<>(2);// x-dead-letter-exchange    这里声明当前队列绑定的死信交换机args.put("x-dead-letter-exchange", TAXI_DEAD_QUEUE_EXCHANGE);// x-dead-letter-routing-key  这里声明当前队列的死信路由keyargs.put("x-dead-letter-routing-key", TAXI_DEAD_KEY);return QueueBuilder.durable(TAXI_OVER_QUEUE).withArguments(args).build();
}

四、打车超时处理

        用户通过调用打车服务将数据放进RabbitMQ的死信队列进行延时操作,等待一段时间后,正常的业务处理还没有处理到我们发起的数据,将会进行超时处理,通过通知服务将我们的处理结构通过websocket方式推送到我们的客户端。

 1.打车超时实现

        在创建队列的时候配置死信交换器并设置队列的“x-message-ttl”属性。此时该属性为整个队列消息的生存时间,这里有一篇专门讲延时任务的文章。RabbitMQ(高阶使用)延时任务-CSDN博客

@Bean
public Queue taxiDeadQueue() {return new Queue(TAXI_DEAD_QUEUE,true);
}@Bean
public Queue taxiOverQueue() {Map<String, Object> args = new HashMap<>(2);// x-dead-letter-exchange    这里声明当前队列绑定的死信交换机args.put("x-dead-letter-exchange", TAXI_DEAD_QUEUE_EXCHANGE);// x-dead-letter-routing-key  这里声明当前队列的死信路由keyargs.put("x-dead-letter-routing-key", TAXI_DEAD_KEY);// x-message-ttl  声明队列的TTLargs.put("x-message-ttl", 30000);return QueueBuilder.durable(TAXI_OVER_QUEUE).withArguments(args).build();
}

这样所有被投递到该队列的消息都最多不会存活超过30s,超时后的消息会被投递到死信交换器

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

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

相关文章

idea插件推荐之Cool Request

Cool Request是一款基于IDEA的HTTP调试工具&#xff0c;可以看成是轻量版的postman&#xff0c;它会自动扫描项目代码中所有API路径&#xff0c;按项目分组管理。一个类被定义为Controller且其中的方法被RequestMapping或者XXXMapping注解标注以后就会被扫描到。 对应方法左侧会…

C++中一般指针,指针数组,数组指针

凤凰台上凤凰游&#xff0c;凤去台空江自流。 吴宫花草埋幽径&#xff0c;晋代衣冠成古丘。 三山半落青天外&#xff0c;二水中分白鹭洲。 总为浮云能蔽日&#xff0c;长安不见使人愁。 ——《登金陵凤凰台》【唐】李白 今天是中秋节&#xff0c;小编在这里祝大家学业有成&…

自然语言处理实战项目全解析

自然语言处理&#xff08;NLP&#xff09;作为人工智能领域的重要分支&#xff0c;正日益受到关注。无论是在智能客服、文本分析&#xff0c;还是情感分析等场景&#xff0c;NLP都扮演着至关重要的角色。在这篇博客中&#xff0c;我将分享几个与热门搜索主题贴近的实战项目案例…

ElasticSearch数据类型和分词器

一、数据类型 1、Text &#xff08;文本数据类型&#xff09; 2、Keyword&#xff08;关键字数据类型&#xff09; 3、Alias&#xff08;别名类型&#xff09; 4、Arrays (集合类型) 5、日期类型 6、Numeric &#xff08;数值数据类型&#xff09; 7、Boolean&#xff0…

智能硬件从零开始的设计生产流程

文章目录 市场分析团队组建ID设计结构设计pcba设计软件开发手板EVT开模DVTPVTMP 智能硬件研发是一个复杂的过程, 当然一件事要发出萌芽必须得有人, 有一天,几个合伙人凑在一起,说一起开发个智能硬件产品吧,于是故事开始了. 市场分析 合伙人: 万物互联的时代, 智能音箱已经成为…

Docker和K8S

Docker技术可以将生成的镜像&#xff0c;在docker容器中运行。Build Once Run Anywhere K8s是对容器集群进行管理协调的工具 一个K8S集群 有一个master节点和多个node节点 master节点里面有 1、etcd&#xff1a;文件保存集群各个节点的状态数据&#xff0c;配置数据等。使用raf…

递归10小题

注&#xff1a;操作数字的数组均为int [ ]型&#xff0c;操作字符串均为char [ ]型 下面的10个问题很常见&#xff0c;在这里都是用递归解决的。涉及到数组的问题&#xff0c;需要有指针的知识。 1.求1到n的和 int getSum(int n)//求1到n的和 {if(n1){return 1;}return ngetS…

LDR6020,单C口OTG,充放一体新潮流!

PD&#xff08;Power Delivery&#xff09;芯片实现单Type-C接口输入和输出OTG&#xff08;On-The-Go&#xff09;功能&#xff0c;主要是通过支持USB Power Delivery规范和OTG功能的特定硬件和软件设计来实现的。以下是对这一过程的具体解释&#xff1a; 一、PD芯片基础功能 …

c++ gtsam/geometry/Pose3.h详细介绍

gtsam/geometry/Pose3.h 是 GTSAM 库中的一个头文件&#xff0c;定义了 Pose3 类。Pose3 用于表示三维空间中的位姿&#xff08;即位置和姿态&#xff09;&#xff0c;它是处理和表示三维空间变换的核心类之一。以下是对 Pose3 类的详细介绍&#xff1a; Pose3 类概述 Pose3 …

Chainlit集成Langchain并使用通义千问实现和数据库交互的网页对话应用增强扩展(text2sql)

前言 我在上一篇文章中《Chainlit集成Langchain并使用通义千问实现和数据库交互的网页对话应用&#xff08;text2sql&#xff09;》 利用langchain 中create_sql_agent 创建一个数据库代理智能体&#xff0c;但是实测中发现&#xff0c;使用 create_sql_agent 在对话中&#x…

Qt控制开发板的LED

Qt控制开发板的LED 使用开发板的IO接口进行控制是嵌入式中非常重要的一点&#xff0c;就像冯诺依曼原理说的一样&#xff0c;一个计算机最起码要有输入输出吧&#xff0c;我们有了信息的接收和处理&#xff0c;那我们就要有输出。 我们在开发板上一般都是使用开发板的GPIO接口…

七、垃圾收集器ParNewCMS与底层三色标记算法详解

文章目录 垃圾收集算法分代收集理论标记-复制算法标记-清除算法标记-整理算法 垃圾收集器1.1 Serial收集器(-XX:UseSerialGC -XX:UseSerialOldGC)1.2 Parallel Scavenge收集器(-XX:UseParallelGC(年轻代),-XX:UseParallelOldGC(老年代))1.3 ParNew收集器(-XX:UseParNewGC)1.4 C…

RNN股票预测(Pytorch版)

任务&#xff1a;基于zgpa_train.csv数据,建立RNN模型,预测股价 1.完成数据预处理&#xff0c;将序列数据转化为可用于RNN输入的数据 2.对新数据zgpa_test.csv进行预测&#xff0c;可视化结果 3.存储预测结果&#xff0c;并观察局部预测结果 备注&#xff1a;模型结构&#xff…

MATLAB 可视化基础:绘图命令与应用

目录 1. 绘制子图1.1基本绘图命令1.2. 使用 subplot 函数1.3. 绘图类型 2.MATLAB 可视化进阶(以下代码均居于以上代码的数据定义上实现)2.1. 极坐标图2.3. 隐函数的绘制 3.总结 在数据分析和科学计算中&#xff0c;数据可视化是理解和解释结果的关键工具。今天&#xff0c;我将…

.bixi勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复

导言 随着网络技术的飞速发展&#xff0c;网络安全威胁日益加剧&#xff0c;各种勒索病毒层出不穷。其中&#xff0c;.bixi勒索病毒&#xff08;也称为Bixi Ransomware&#xff09;作为一种新兴的网络安全威胁&#xff0c;对个人用户和企业数据安全构成了严重威胁。本文91数据…

PHP7 json_encode() 浮点小数溢出错误

原因已找到, 该现象只出现在PHP 7.1版本上 建议使用默认值 serialize_precision -1 即可 事情是这样的,项目里发现一个奇怪的现象,json_encode一个带浮点价格的数据, 出现溢出, 比如: echo json_encode(277.2); // 输出结果为: 277.199999999999989这明显是不能接受的, 数据…

【C++】基础知识 笔记

目录 1.1 基本结构&#xff1a; 1.2 注释 单行注释 多行注释 1.3 变量 1.4 常量 C定义常量两种方式 1.5 关键字&#xff08;标识符&#xff09; 标识符起名规则 1.1 基本结构&#xff1a; #include "iostream" using namespace std; //以上两行是预处理指令…

Text2vec -文本转向量

文章目录 一、关于 Text2vec1、Text2vec 是什么2、Features3、Demo4、News5、Evaluation英文匹配数据集的评测结果&#xff1a;中文匹配数据集的评测结果&#xff1a; 6、Release Models 二、Install三、使用1、文本向量表征1.2 Usage (HuggingFace Transformers)1.3 Usage (se…

标准库标头 <barrier>(C++20)学习

此头文件是线程支持库的一部分。 类模板 std::barrier 提供一种线程协调机制&#xff0c;阻塞已知大小的线程组直至该组中的所有线程到达该屏障。不同于 std::latch&#xff0c;屏障是可重用的&#xff1a;一旦到达的线程组被解除阻塞&#xff0c;即可重用同一屏障。与 std::l…

NISP 一级 | 5.5 账户口令安全

关注这个证书的其他相关笔记&#xff1a;NISP 一级 —— 考证笔记合集-CSDN博客 0x01&#xff1a;账户口令安全威胁 当用户在使用各种应用时&#xff0c;需通过账户和口令来验证身份从而访问某些资源&#xff0c;因此&#xff0c;账号口令的安全性非常重要。当前攻击者窃取用户…