`

rabbitmq死信队列和延时队列的使用

阅读更多

死信队列&死信交换器:DLX 全称(Dead-Letter-Exchange),称之为死信交换器,当消息变成一个死信之后,如果这个消息所在的队列存在x-dead-letter-exchange参数,那么它会被发送到x-dead-letter-exchange对应值的交换器上,这个交换器就称之为死信交换器,与这个死信交换器绑定的队列就是死信队列。

 

死信消息:

  1. 消息被拒绝(Basic.Reject或Basic.Nack)并且设置 requeue 参数的值为 false
  2. 消息过期了
  3. 队列达到最大的长度

过期消息:

    在 rabbitmq 中存在2种方可设置消息的过期时间,第一种通过对队列进行设置,这种设置后,该队列中所有的消息都存在相同的过期时间,第二种通过对消息本身进行设置,那么每条消息的过期时间都不一样。如果同时使用这2种方法,那么以过期时间小的那个数值为准。当消息达到过期时间还没有被消费,那么那个消息就成为了一个 死信 消息。

    队列设置:在队列申明的时候使用 x-message-ttl 参数,单位为 毫秒

    单个消息设置:是设置消息属性的 expiration 参数的值,单位为 毫秒

 

延时队列:在rabbitmq中不存在延时队列,但是我们可以通过设置消息的过期时间和死信队列来模拟出延时队列。消费者监听死信交换器绑定的队列,而不要监听消息发送的队列。

 

有了以上的基础知识,我们完成以下需求:

需求:用户在系统中创建一个订单,如果10s后,用户没有进行支付,那么自动取消订单。

分析:

        1、上面这个情况,我们就适合使用延时队列来实现,那么延时队列如何创建

        2、延时队列可以由 过期消息+死信队列 来时间

        3、过期消息通过队列中设置 x-message-ttl 参数实现

        4、死信队列通过在队列申明时,给队列设置 x-dead-letter-exchange 参数,然后另外申明一个队列绑定x-dead-letter-exchange对应的交换器

 

伪代码如下:

 

消息大致流转过程

 

完整代码:

代码如下:https://gitee.com/huan1993/rabbitmq/tree/master/rabbitmq-advance/src/main/java/com/huan/rabbitmq/advance/dlx

 

  • 大小: 104.6 KB
  • 大小: 71.9 KB
分享到:
评论

相关推荐

    【ASP.NET编程知识】运用.NetCore实例讲解RabbitMQ死信队列,延时队列.docx

    以下是ASP.NET编程知识中关于RabbitMQ死信队列和延时队列的知识点总结: 一、死信队列 死信队列是一个特殊的队列,用于存储不能被消费的消息。这些消息可能是由于各种原因而不能被消费的,例如消息格式不正确、...

    支付状态一致性-RabbitMQ死信队列

    支付状态一致性-RabbitMQ死信队列

    RabbitMQ死信队列应用1

    RabbitMQ死信队列(Dead Letter Exchange, DLX)是一种高级特性,用于处理那些无法正常处理或过期的消息。当消息在业务队列中处理失败,如因异常导致重试次数达到上限,就会变为死信。DLX允许将这些死信重新发布到另...

    Spring Cloud商城项目专栏 036 RabbitMQ消息确认 死信队列 延时队列

    Spring Cloud商城项目专栏 036 RabbitMQ消息确认 死信队列 延时队列

    springboot+rabbitmq实现延时队列

    3. **创建延时队列**:RabbitMQ本身不直接支持延时队列,但可以通过特殊策略(例如TTL和死信交换机)间接实现。创建一个普通队列,并设置消息的TTL(Time To Live),当消息未被消费时,会进入死信交换机,再通过...

    使用RabbitMQ死信实现延迟消息

    spring boot 配置, Rabbitmq集成, 利用死信 实现延时消息队列实现

    RabbitMQ延迟队列及消息延迟推送实现详解

    延迟队列的实现方式有多种,例如,使用死信队列+TTL 过期时间来实现延迟队列,使用 RabbitMQ 官方提供的延迟队列插件等。每种方式都有其优缺点,需要根据实际情况选择合适的方式。 在使用 RabbitMQ 实现延迟队列时...

    如何通过Python实现RabbitMQ延迟队列

    最近在做一任务时,遇到需要延迟处理的数据,最开始的做法是现...2、Dead Letter Exchanges(DLX)死信队列。下面将具体描述实现原理以及实现代 延迟队列的基础原理Time To Live(TTL) RabbitMQ可以针对Queue设置x-expi

    高效延时队列的设计与实现

    RabbitMQ结合消息的TTL和死信路由特性,将过期消息转发到死信队列,由消费者监听死信队列并消费。 Redis实现延时队列的原理: 使用ZSet存储消息,key为消息ID,value为延迟时间加优先级。通过两个定时器分别负责...

    RabbitMq 消息队列.zip

    插件是RabbitMQ功能的扩展,通过插件可以实现更复杂的消息处理逻辑,如消息持久化、优先级、死信队列等。 在安装RabbitMQ的过程中,你需要: - 运行`otp_win64_21.2.exe`,按照向导完成Erlang环境的安装。 - 安装`...

    Rabbitmq延迟队列实现定时任务的方法

    在 RabbitMQ 中,延迟队列是通过死信交换机(Dead Letter Exchange)和消息的存活时间(TTL)来实现的。死信交换机是一个特殊的交换机,它可以存储那些已经过期的消息,而 TTL 则是指消息的存活时间。 当我们发送一...

    springboot-rabbitmq.rar

    于rabbitmq的基本概念和相关的理论这里就不做过多介绍了,在之前的篇幅中有过相应的介绍,也可以查询一些资料详细了解一下rabbitmq的基础知识,下面要...2、rabbitmq的延时队列,也称作为死信队列的一些研究心得分享

    RabbitMQ.xmind

    RabbitMQ知识体系的脑图结构。 主要包括概念、MQ的分类、主流的MQ产品、RabbitMQ的五种消息模型、死信队列、延时队列,如何使用RabbitMQ及关于RabbitMQ的面试题。

    RabbitMQ实战视频.zip

    9. **死信队列**:掌握死信队列的概念,当消息无法正常路由或达到最大重试次数时,会被送到死信队列,用于排查问题和保证数据安全。 10. **监控与管理**:通过RabbitMQ的Web管理界面,学习如何监控队列状态、查看...

    RabbitMQ延时消息实现方案

    RabbitMQ并不直接提供延时队列功能,但是可以通过一些配置和策略模拟出延迟消息的功能。 首先,要理解RabbitMQ中实现延时消息的基本原理。RabbitMQ支持针对队列Queue和消息Message设置x-message-ttl(Time To Live...

    JAVA 实现延迟队列的方法

    缺点是配置麻烦,额外增加一个死信交换机和一个死信队列的配置,且 RabbitMQ 是一个消息中间件,TTL 和 DLX 只是他的一个特性,将延迟队列绑定在一个功能软件的某一个特性上,可能会有风险。 3. 基于 Netty#...

    RabbitMQ双活架构设计.docx

    我们可以通过创建两个队列,工作队列和重试队列,并配置死信转发的 Exchange 和 Routing-key 来实现消息延迟重试机制。 消息延时消费 RabbitMQ 还提供了消息延时消费的机制,可以让某些任务延时执行。这可以借助...

    rabbitmq_delayed_message_exchange3.7

    **RabbitMQ延迟消息交换机3.7版详解** RabbitMQ是一款开源的消息代理和队列服务器,广泛应用于分布式系统中的消息传递...在实际应用中,结合其他工具和策略,如死信队列、批量处理等,可以构建出更健壮的分布式系统。

    延时队列我在项目里是怎么实现的?.doc

    描述中提到了作者3y在项目中实现延时队列的经验,以及考虑到了数据持久化和系统重启时的数据丢失问题。 在Java中,`DelayQueue`是一个无界阻塞队列,用于存储实现了`Delayed`接口的元素。`Delayed`接口要求元素能够...

    rabbitmq基础入门

    此外,RabbitMQ还有死信队列的概念,处理那些无法正常路由或被拒绝的消息。死信可能源于消息TTL过期、队列溢出或消息被拒绝。延时队列则用于处理需要在特定时间后处理的消息,RabbitMQ可以通过插件实现这一功能。 ...

Global site tag (gtag.js) - Google Analytics