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

Rabbitmq的死信队列与如何利用死信队列实现延迟队列

如果设置了队列的 TTL 属性,那么一旦消息过期,就会被队列丢弃(如果配置了死信队列被丢到死信队列中)。而如果仅设置消息的 TTL 属性,即使消息过期,也不一定会被马上丢弃,因为消息是否过期是在即将投递到消费者之前判定的,如果当前队列有严重的消息积压情况,则已过期的消息也许还能存活较长时间;

还需要注意的一点是,如果不设置 TTL,表示消息永远不会过期,如果将 TTL 设置为 0,则表示除非此时可以直接投递该消息到消费者,否则该消息将会被丢弃。

上文中提到的问题,确实是一个问题,如果不能实现在消息粒度上的 TTL,并使其在设置的TTL 时间及时死亡,就无法设计成一个通用的延时队列。那如何解决呢,我们可以通过 Rabbitmq 自带的延时队列插件解决这个问题。

这个就是声明一个延迟交换机实现需求
在我们自定义的交换机中,这是一种新的交换类型,该类型消息支持延迟投递机制 消息传递后并不会立即投递到目标队列中,而是存储在 mnesia(一个分布式数据系统)表中,当达到投递时间时,才投递到目标队列中。

总结:

RabbitMQ 实现延迟队列有两种方式,一种是通过死信来实现,其中又细分为设置队列的TTL和消息的TTL两种,原理就是消息在指定的时间过期后会通过死信交换机进入到死信队列,最后被消费者消费,不过基于消息到TTL来实现会存在消息积压而导致没有在后面发送到消息没有在指定延迟时间被消费的情况,因为该情况本质上是遵循先来先到的原则,先发送的消息延迟时间到了后才继续处理后面的消息;另一种是通过 RabbitMQ 的插件来实现,该插件的原理就是是消息在交换机处延迟,也就是生产者发送消息到延迟交换机等待指定时候才路由到队列中由消费者消费,该方式简单而且能避免上述问题,只需要一个延迟交换机即可实现,不需要死信交换机和死信队列。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • gitlab-runner /var/run/docker.sock connect permission denied
  • 【Wiki: 使用 netsh wlan show networks mode=bssid | findstr /R /C:“信号“ /C:“频道“ 命令】
  • 基于Python的Bilibili视频信息分析与可视化
  • unfinish ctf 网鼎杯二次注入 无列名注入join-using
  • 无心剑七律《悼李政道先生》
  • 【方法】如何给7Z压缩包添加密码?
  • 大型语言模型入门
  • Linux中Samba服务配置和管理
  • SQL注入 报错注入、文件上传、布尔盲注、时间盲注
  • TortoiseSVN迁移到本地git
  • P2045 方格取数加强版
  • 人工智能时代,程序员当如何保持核心竞争力?
  • 通过代码学python——格式化变量
  • 当AIGC走进温室大棚:AI+“种菜“的前世今生
  • ACl访问控制实验
  • Google 是如何开发 Web 框架的
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • Angular6错误 Service: No provider for Renderer2
  • dva中组件的懒加载
  • Javascript弹出层-初探
  • jquery cookie
  • Linux后台研发超实用命令总结
  • Mithril.js 入门介绍
  • springMvc学习笔记(2)
  • spring学习第二天
  • 分类模型——Logistics Regression
  • 机器学习 vs. 深度学习
  • 漂亮刷新控件-iOS
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • 新版博客前端前瞻
  • linux 淘宝开源监控工具tsar
  • 阿里云ACE认证之理解CDN技术
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • 昨天1024程序员节,我故意写了个死循环~
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • #单片机(TB6600驱动42步进电机)
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (分布式缓存)Redis持久化
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (每日一问)基础知识:堆与栈的区别
  • (四)React组件、useState、组件样式
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • .NET/C# 的字符串暂存池
  • .netcore 获取appsettings
  • .Net程序帮助文档制作
  • .NET导入Excel数据
  • /etc/X11/xorg.conf 文件被误改后进不了图形化界面
  • @ 代码随想录算法训练营第8周(C语言)|Day53(动态规划)
  • @cacheable 是否缓存成功_让我们来学习学习SpringCache分布式缓存,为什么用?