rabbitmq利用消息超时和死信交换机实现定时任务

MalcolmF MalcolmF     2022-10-24     339

关键词:

  在 RabbitMQ 的基础功能中,并没有定时任务或者延时任务这种功能,然而很多业务都有此类需求,但是我们可以依赖 RabbitMQ 的消息自动超时和死信交换机等基本的属性来实现这类需求,大致思路如下:

  1.通过计算 任务执行时间 和 当前时间的时间差,作为消息的超时时间(Expire)属性;

  2.将消息发到一个具有死信交换机的队列中暂时缓存消息;

  3.消息在缓存队列中到达超时时间,自动发送到死信交换机,从而到达任务目标队列,由消费者进行消费;

  流程图如下:

   

rabbitmq死信队列dlx应用

...消息推送到DLXQueue死信队列中。主要过程:生产者—>原交换机amq.direct—>原队列TestDLXQueue(超过TTL之后)—>死信交换机DLXExchange—>死信队列DLXQueue—>最终消费者。创建死信队列DLX_QUEUE并和指定交换机DLX_EXCHANGE进行绑定(... 查看详情

rabbitmq的死信队列和延时队列(代码片段)

...Q死信队列和延时队列​RabbitMQ本身是具有死信队列和死信交换机属性的,延时队列可以通过死信队列和死信交换机来实现。在电商行业中,通常都会有一个需求:订单超时未支付,自动取消该订单。那么通过RabbitM... 查看详情

rabbitmq死信队列定时队列延时队列

...0;  2.Queue:dlx.queue  3.RoutingKey:#然后正常声明交换机,队列,绑定,只不过需要在队列加上一个扩展参数即可:arguments.put(“x-dead-letter-exchange”,“dlx.exchange”);1 查看详情

rabbitmq实现延迟发送消息

...tifactId></dependency>创建配置类1.声明死信队列,死信交换机,并绑定2.声明普通队列,普通交换机,并绑定3.普通队列需设置死信交换机,以及死信路由key前两步很简单,就不贴代码了,需要注意第三步Map<String,Object>args=... 查看详情

rabbitmq的动态创建交换机、队列、绑定、死信队列,延迟队列代码实现

...举ExchangeEnum、QueueEnum、BindingEnum动态维护和创建1.初始化交换机2.初始化队列3.交换机和队列绑定1.定义队列2.定义交换机3.交换机和队列绑定4.不定义超时队列的@RabbitListener,只定义超时接收队列的@RabbitListener测试:1.AsyncRabbitTemplat... 查看详情

rabbitmq实现延时队列-springboot版本(代码片段)

...消息超时成为死信后,会把消息死信重新发送到配置好的交换机中,然后分发到真实的消费队列;步骤:1、创建带有时限的队列dealLineQueue;2、创建死信Faout交换机dealLineExchange;3、创建消费队列realQueue,并和dealLineExchange绑 查看详情

使用rabbitmq处理死信队列

...“死信队列”。在定义业务队列时可以考虑指定一个死信交换机,并绑定一个死信队列。当消息变成死信时,该消息就会被发送到该死信队列上,这样方便我们查看消息失败的原因。以下几种情况导致消息变为死信:对于RabbitMQ... 查看详情

rabbitmq延迟消息

...器DeadLetterExchanges一个消息在满足如下条件下,会进死信交换机,记住这里是交换机而不是队列,一个交换机可以对应很多队列。(1)一个消息被Consumer拒收了,并且reject方法的参数里requeue是false。也就是说不会被再次放在队列... 查看详情

gorabbitmq死信消息队列(代码片段)

...建一个正常的队列Q1,目的是处理业务逻辑,比如发送订单消息等,对应交换器和绑定键 分别为 E1和 Bingkey1 (2)创建一个延时消息队列Q2,设定队列的延时时间为10s,对应的交换器和绑定键分别为E2和Bingkey2;并在该... 查看详情

使用rabbitmq的死信队列实现延迟消息(代码片段)

...可选) 死信队列设计思路:生产者-->消息-->交换机-->队列-->变成死信-->DLX交换机-->队列-->消费者进入消息队列:1.消息被拒绝,并且requeue=false2.消息ttl过期3.队列 查看详情

rabbitmq死信队列(代码片段)

...mq中)消息变成死信后,会被重新投递(publish)到另一个交换机上(Exchange),这个交换机往往被称为DLX(dead-letter-exchange)“死信交换机”,然后交换机根据绑定规则转发到对应的队列上,监听该队列就可以被重新消费。应用... 查看详情

浅谈rabbitmq——死信队列与延迟队列(代码片段)

...信队列,英文缩写:DLX。DeadLetterExchange(死信交换机),其实应该叫做死信交换机才更恰当。当消息成为Deadmessage后,可以被重新发送到另一个交换机,这个交换机就是DLX。总结:其实死信队列就是... 查看详情

rabbitmq消费失败死信队列

Rabbitmq重消费处理一处理流程图:业务交换机:正常接收发送者,发送过来的消息,交换机类型topicAE交换机:当业务交换机无法根据指定的routingkey去路由到队列的时候,会全部发送到AE交换机.发送到此队列的消息属于,业务垃圾消息,或者... 查看详情

RabbitMQ 死信交换永远不会收到消息

】RabbitMQ死信交换永远不会收到消息【英文标题】:RabbitMQdeadletterexchangenevergettingmessages【发布时间】:2014-03-1114:56:31【问题描述】:我正在尝试设置我的第一个RabbitMQ死信交换,以下是我通过Web管理界面使用的步骤:使用名称“d... 查看详情

死信交换 RabbitMQ 丢弃消息

】死信交换RabbitMQ丢弃消息【英文标题】:DeadletterexchangeRabbitMQdroppingmessages【发布时间】:2012-11-1710:02:18【问题描述】:我正在尝试在RabbitMQ中实现一个dlx队列。场景很简单我有2个队列:1)活着2)dead(x-dead-letter-exchange:"immediate",x-mes... 查看详情

rabbitmq之消息可靠性死信交换机惰性队列及集群(代码片段)

....消息持久化3.消费者消息确认4.消费失败重试机制二.死信交换机1.死信2.TTL3.延迟队列三.惰性队列1.消息堆积问题2.惰性队列四.MQ集群1.集群分类2.普通集群3.镜像集群4.仲裁队列MQ的一些常见问题消息可靠性问题:如何确保发送... 查看详情

rabbitmq学习(中)——交换机死信队列和延迟队列(代码片段)

RabbitMQ学习(中)——交换机、死信队列和延迟队列一、交换机1.1Fanoutexchange(发布/订阅模式)1.2Directexchange(路由模式)1.3Topics模式二、死信队列2.1死信之TTl2.2死信之最大长度2.3死信之消息被拒三、延迟... 查看详情

RabbitMQ,死信交换-> 无法将消息路由到默认交换?

】RabbitMQ,死信交换->无法将消息路由到默认交换?【英文标题】:RabbitMQ,deadlettersexchanges->Can\'troutemessagetothedefaultexchange?【发布时间】:2012-12-1723:54:35【问题描述】:使用RabbitMQAdmin(v3),我尝试创建一个将死信消息发送到默... 查看详情