当前位置: 首页 > news >正文

RabbitMQ-死信队列

接上文 RabbitMQ-java使用消息队列

1 死信队列简介

在这里插入图片描述
在这里插入图片描述

死信队列模式实际上本质是一个死信交换机+绑定的死信队列,当正常队列的消息被判定为死信时,会被发送到对应的死信交换机,然后再通过交换机发送到死信队列中,死信队列也有对应的消费者去处理消息。

1.1 测试第一种(消息被拒绝)

直接在配置类中创建一个新的死信交换机和死信队列,并进行绑定:

@Configuration
public class RabbitConfiguration {@Bean("directDlExchange")public Exchange dlExchange(){//创建一个新的死信交换机return ExchangeBuilder.directExchange("dlx.direct").build();}@Bean("yydsDlQueue")   //创建一个新的死信队列public Queue dlQueue(){return QueueBuilder.nonDurable("dl-yyds").build();}@Bean("dlBinding")   //死信交换机和死信队列进绑定public Binding dlBinding(@Qualifier("directDlExchange") Exchange exchange,@Qualifier("yydsDlQueue") Queue queue){return BindingBuilder.bind(queue).to(exchange).with("dl-yyds").noargs();}...@Bean("yydsQueue")public Queue queue(){return QueueBuilder.nonDurable("yyds").deadLetterExchange("dlx.direct")   //指定死信交换机.deadLetterRoutingKey("dl-yyds")   //指定死信RoutingKey.build();}...
}

在这里插入图片描述
在这里插入图片描述

删除rabbitmq管理页面的队列,关之前把springboot的application启动类关闭,否则删除完队列马上又创建新的队列

在这里插入图片描述

定义死信队列监听

@Component
public class TestListener {@RabbitListener(queues = "dl-yyds", messageConverter = "jacksonConverter")public void receiver(User user){System.out.println(user);}
}

在这里插入图片描述

启动服务器application。进入rabbitmq网页管理端,可以看到出现两个队列。

在这里插入图片描述

查看交换机

在这里插入图片描述

查看dlx.direct交换机详情

在这里插入图片描述

向amq.direct交换机发送消息{"id":1,"name":"LB"}

在这里插入图片描述
在这里插入图片描述

此时yyds队列出现一条消息

在这里插入图片描述

将消息拒绝使其变为死信消息。

在这里插入图片描述

此时死信队列监听到拒绝的信息

在这里插入图片描述

1.1 测试第二种(消息TTL过期)

RabbitMQ支持将超过一定时间没被消费的消息自动删除,这需要消息队列设定TTL值,若消息的存活时间超过了Time To Live值,则会被自动删除,自动删除后的消息若有死信队列,则会进入死信队列。

给yyds队列设定TTL值(毫秒为单位):先把服务器关闭,然后删除队列yyds

在这里插入图片描述
在这里插入图片描述
启动服务,然后在amq.direct交换机详情发送消息{"id":1,"name":"LB"}
在这里插入图片描述
在这里插入图片描述

不进行处理5s后死信队列会监听到消息

在这里插入图片描述

1.1 测试第三种(队列达到最大长度)

关闭服务,删除yyds,在配置类添加参数,然后启动服务

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

同样在amq.direct交换机发送消息,发送三次消息分别为{"id":1,"name":"LB"},{"id":2,"name":"LB"},{"id":3,"name":"LB"}

在这里插入图片描述

此时消息队列3条消息

在这里插入图片描述

此时死信队列未监听到数据

在这里插入图片描述

然后再发送一条{"id":4,"name":"LB"}

在这里插入图片描述

然后发现死信队列监听器监听到消息,此时第四条消息把第一条挤出去了。

在这里插入图片描述
此时yyds队列还剩下三条消息
在这里插入图片描述
在这里插入图片描述

http://www.lryc.cn/news/182041.html

相关文章:

  • ElasticSearch - 基于 DSL 、JavaRestClient 实现数据聚合
  • 什么是数学建模(mooc笔记)
  • 基于SpringBoot的流浪动物管理系
  • fcpx插件:82种复古电影胶卷框架和效果mFilm Matte
  • 【LeetCode热题100】--98.验证二叉搜索树
  • wxpython:wx.grid 表格显示 Excel xlsx文件
  • 事件循环机制
  • 苹果曾考虑基于定位控制AirPods Pro自适应音频
  • 【代码阅读笔记】yolov5 rknn模型部署
  • 【多线程】进程与线程 并发编程 面试题总结
  • C++算法 —— 动态规划(10)二维费用背包
  • MySQL数据库正在耗用大量CPU的问题排查
  • php替换字符串里的a变为b
  • 黑豹程序员-架构师学习路线图-百科:CSS-网页三剑客
  • NUWA论文阅读
  • 4.Tensors For Beginners-Vector Definition
  • vertx学习总结5
  • Go,从命名开始!Go的关键字和标识符全列表手册和代码示例!
  • 【网络】网络扫盲篇 ——用简单语言和图解带你入门网络
  • 【项目开发 | C语言项目 | C语言薪资管理系统】
  • Android---GC回收机制与分代回收策略
  • 前缀、中缀、后缀表达式相互转换工具
  • Vue之ElementUI之动态树+数据表格+分页(项目功能)
  • 【CAD二次开发】给CAD添加TRUSTEDPATHS避免dll插件信任弹窗
  • 编译和链接
  • 常识判断 --- 科技常识
  • 修改npm全局安装的插件(下载目录指向)
  • <C++> 异常
  • 聊聊HttpClientBuilder
  • MacOS - Sonoma更新了啥