RabbitMQ深度探索:死信队列

  1. 死信队列产生背景:
    1. RabbitMQ 死信队列俗称 备胎队列:消息中间件因为某种原因拒收该消息后,可以转移到私信队列中存放,死信队列也可以有交换机和路由 key 等
  2. 生产死信队列的原因:
    1. 消息投递到 MQ 存放,消息已经过期,消费者没有及时获取到我们的消息,消息如果存放到 MQ 服务器中过期之后,会转移到备胎死信队列存放
    2. 多列达到最大长度(队列已满)
    3. 消费者消费多次消息失败,就会转义到私信队列中
  3. 案例:
    1. 配置类:
      @Component
      public class DeadExchangeConfig {//普通交换机@Value("${boyatop.order.exchange}")private  String order_exchange;//普通队列@Value("${boyatop.order.queue}")private String order_queue;//普通队列的 key@Value("${boyatop.order.routingKey}")private String order_rotingKey;//死信交换机@Value("${boyatop.dlx.exchange}")private String dlx_exchange;//死信队列@Value("${boyatop.dlx.queue}")private String dlx_queue;//死信队列的 key@Value("${boyatop.dlx.routingKey}")private String dlx_routingKey;//定义死信交换机@Beanpublic DirectExchange dlxExchange(){return new DirectExchange(dlx_exchange);}//定义死信队列@Beanpublic Queue dlxQueue(){return new Queue(dlx_queue);}//定义普通交换机@Beanpublic DirectExchange orderExchange(){return new DirectExchange(order_exchange);}//定义普通队列@Beanpublic Queue orderQueue(){//订单队列绑定死信交换机Map<String,Object> arguments = new HashMap<>(2);arguments.put("x-dead-letter-exchange",dlx_exchange);arguments.put("x-dead-letter-routing-key",dlx_routingKey);return new Queue(order_queue,true,false,false,arguments);
      //        return QueueBuilder.durable(order_queue).withArguments(arguments).build();}//订单队列绑定交换机@Beanpublic Binding bindingOrderExchange(DirectExchange orderExchange, Queue orderQueue){return BindingBuilder.bind(orderQueue).to(orderExchange).with(order_rotingKey);}//死信队列绑定交换机@Beanpublic Binding bindingDlxExchange(DirectExchange dlxExchange, Queue dlxQueue){return BindingBuilder.bind(dlxQueue).to(dlxExchange).with(dlx_routingKey);}}
    2. 生产者:
      @RestController
      public class producerService {@Value("${boyatop.order.exchange}")private String orderExchange;@Value("${boyatop.order.routingKey}")private String orderRouTingKey;@AutowiredRabbitTemplate rabbitTemplate;@RequestMapping("/sendMsg")public String send(){String msg = "11111";rabbitTemplate.convertAndSend(orderExchange,orderRouTingKey,msg,message -> {//设置超时时间message.getMessageProperties().setExpiration("5000");return message;});return "success";}}
    3. yml 文件:
      spring:rabbitmq:####连接地址host: 127.0.0.1####端口号port: 5672####账号username: guest####密码password: guest### 地址virtual-host: boyatopVirtualHost#演示死信队列
      boyatop:#备胎交换机dlx:exchange: boyatop_dlx_exchangequeue: boyatop_dlx_queueroutingKey: dlx#普通交换机order:exchange: boyatop_order_exchangequeue: boyatop_order_queueroutingKey: order
  4. 死信队列架构原理:
    1. 死信队列和普通队列区别不是很大
    2. 普通队列和死信队列都有自己独立的交换机、路由 key、队列和消费者
    3. 区别:
      1. 生产者投递消息先投递到普通交换机中,普通交换机再将该消息投到普通队列中缓存起来,普通队列对应有自己独立的消费者
      2. 如果生产者投递消息到普通队列中,普通队列发现该消息一直没有被消费者消费的情况下,这时候会将该消息转移到死信(备胎)交换机中
      3. 死信(备胎)交换机对应有自己独立的死信(备胎)队列,对应独立的死信(备胎)消费者
  5. 死信队列应用场景:
    1. 30 分钟订单超时设计
      1. redis 过期 key
      2. 死信延迟队列实现
    2. 采用死信队列,创建一个普通队列没有对应的消费者消费该消息,在 30 分钟过后就会将该消息转移到死信备胎消费者实现消费
    3. 死信备胎消费者会根据订单号码查询是否已经支付过,如果没有支付的情况下则会开始回滚库存操作

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

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

相关文章

蓝桥算法基础2

位运算 按位与&#xff0c;x&1x%2.因为1不论和几位二进制与&#xff0c;都只有最后一位为1&#xff0c;前面都是0&#xff0c;那么&前面也都为0&#xff0c;只有最后一位&#xff0c;若为1那么2的0次方为1&#xff0c;该数一定为奇数&#xff0c;与取余结果同&#xff…

【Android】版本和API对应关系表

目录 版本和API对应关系表 不积跬步&#xff0c;无以至千里&#xff1b;不积小流&#xff0c;无以成江海。要沉下心来&#xff0c;诗和远方的路费真的很贵&#xff01; 版本和API对应关系表 版本名版本号名称APIAndroid 1616.0W36Android 1515.0V35Android 1414.0U34Android 1…

B站自研的第二代视频连麦系统(上)

导读 本系列文章将从客户端、服务器以及音视频编码优化三个层面&#xff0c;介绍如何基于WebRTC构建视频连麦系统。希望通过这一系列的讲解&#xff0c;帮助开发者更全面地了解 WebRTC 的核心技术与实践应用。 背景 在文章《B站在实时音视频技术领域的探索与实践》中&#xff…

redis之AOF持久化过程

流程图 在redis.conf文件中配置appendonly为yes则开启aof持久化机制 #开启aof持久化&#xff0c;默认关闭为no appendonly no也可以在命令行开启 aof刷盘策略 #每个写操作都会同步刷盘。 appendfsync always #执行命令后先放入aof缓冲区&#xff0c;每秒钟将缓冲区数据刷盘…

力扣.623. 在二叉树中增加一行(链式结构的插入操作)

Problem: 623. 在二叉树中增加一行 文章目录 题目描述思路复杂度Code 题目描述 思路 1.首先要说明&#xff0c;对于数据结构无非两大类结构&#xff1a;顺序结构、链式结构&#xff0c;而二叉树实质上就可以等效看作为一个二叉链表&#xff0c;而对于链表插入一个节点的操作是应…

DeepSeek与人工智能的结合:探索搜索技术的未来

云边有个稻草人-CSDN博客 目录 引言 一、DeepSeek的技术背景 1.1 传统搜索引擎的局限性 1.2 深度学习在搜索中的优势 二、DeepSeek与人工智能的结合 2.1 自然语言处理&#xff08;NLP&#xff09; 示例代码&#xff1a;基于BERT的语义搜索 2.2 多模态搜索 示例代码&…

js精彩代码集锦

收集一些基础的、精彩的JavaScript代码片段。 查找算法 二分查找&#xff08;适用于有序数据&#xff09;O(logn) // 从中间开始&#xff0c;查找元素x&#xff0c;比x小&#xff0c;从右侧元素找 const find function (arr, findEl) {let min 0let count 0let max arr.l…

【LeetCode力扣】1.(简单)两数之和(JavaScript)

两数之和&#xff1a; 题目描述: 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重…

安卓7以上抓包证书安装

安卓7以上抓包证书安装 fiddler 用户可以直接试试这个文件 前提是要root过了&#xff0c;如果是模拟器就很容易开启 前提&#xff1a;要有openssl工具&#xff0c;在linux一个指令就可以下载了&#xff1a;sudo apt-get install openssl,windons则是在https://www.openssl.org/…

【GoLang】切片的面试知识点

nil切片 和 空切片 nil切片是只声明但未初始化&#xff0c;没有分配底层数组的内存空间&#xff0c; 空切片是初始化了的&#xff0c;有分配数组内存&#xff0c;只是数组内没有元素。 二者都可以正常扩容、遍历。不会报错。 append 如何添加切片 append 可以增加切片&…

利用 IMU 估计人体关节轴向和位置 —— 论文推导

Title: 利用 IMU 估计人体关节轴向和位置 —— “Joint axis and position estimation from inertial measurement data by exploiting kinematic constraints” —— 论文推导 文章目录 I. 论文回顾II. 铰接关节的约束1. 铰接关节约束的原理2. 铰接关节约束的梯度3. 铰接关节约…

JVM图文入门

往期推荐 【已解决】redisCache注解失效&#xff0c;没写cacheConfig_com.howbuy.cachemanagement.client.redisclient#incr-CSDN博客 【已解决】OSS配置问题_keyuewenhua.oss-cn-beijing.aliyuncs-CSDN博客 【排坑】云服务器docker部署前后端分离项目域名解析OSS-CSDN博客 微服…

利用ETL工具进行数据挖掘

ETL的基本概念 数据抽取&#xff08;Extraction&#xff09;&#xff1a;从不同源头系统中获取所需数据的步骤。比如从mysql中拿取数据就是一种简单的抽取动作&#xff0c;从API接口拿取数据也是。 数据转换&#xff08;Transformation&#xff09;&#xff1a;清洗、整合和转…

超详细UE4(虚幻4)第一人称射击(FPS)游戏制作教程

超详细UE4(虚幻4)第一人称射击(FPS)游戏制作教程 引言 在游戏开发领域,第一人称射击(FPS)游戏一直是最受欢迎的类型之一。从经典的《反恐精英》(CS)到现代的《使命召唤》(Call of Duty),FPS游戏凭借其紧张刺激的游戏体验和高度沉浸感,吸引了无数玩家。如果你是一…

MySQL数据库(五)索引

一 索引概述 1 介绍&#xff1a;MySQL索引是一种有序数据结构&#xff0c;它能够高效帮助数据库系统快速定位到表中的特定记录&#xff0c;从而显著提高查询效率。索引可以被看作是书的目录&#xff0c;通过它可以迅速找到所需的信息而不需要逐页翻阅整本书。 2 优缺点 二 索…

LeetCode 5

最长回文子串 动态规划 d p [ i ] [ j ] d p [ i 1 ] [ j − 1 ] a n d s [ i ] s [ j ] dp[i][j] dp[i1][j-1] \ \ and \ \ s[i]s[j] dp[i][j]dp[i1][j−1] and s[i]s[j] 长串依赖短串的状态。 所以枚举长度的时候从大到小。 const int N 1010; class Solu…

让文物“活”起来,以3D数字化技术传承文物历史文化!

文物&#xff0c;作为不可再生的宝贵资源&#xff0c;其任何毁损都是无法逆转的损失。然而&#xff0c;当前文物保护与修复领域仍大量依赖传统技术&#xff0c;同时&#xff0c;文物管理机构和专业团队的力量相对薄弱&#xff0c;亟需引入数字化管理手段以应对挑战。 积木易搭…

一文解释nn、nn.Module与nn.functional的用法与区别

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;零基础入门PyTorch框架_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 …

HAL库外设宝典:基于CubeMX的STM32开发手册(持续更新)

目录 前言 GPIO&#xff08;通用输入输出引脚&#xff09; 推挽输出模式 浮空输入和上拉输入模式 GPIO其他模式以及内部电路原理 输出驱动器 输入驱动器 中断 外部中断&#xff08;EXTI&#xff09; 深入中断&#xff08;内部机制及原理&#xff09; 外部中断/事件控…

mac 安装 dotnet 环境

目录 一、安装准备 二、安装方法&#xff08;两种任选&#xff09; 方法 1&#xff1a;使用官方安装包&#xff08;推荐新手&#xff09; 方法 2&#xff1a;使用 Homebrew&#xff08;适合开发者&#xff09; 1. 安装 Homebrew&#xff08;如未安装&#xff09; 2. 通过 …