RabbitMQ实现延时队列

本文介绍了如何使用RabbitMQ实现延迟任务,重点讲解了消息的TTL(存活时间)和死信Exchange的概念。通过设置消息的TTL,配合Dead Letter Exchange,当消息过期或达到特定条件时,消息会转发到死信交换机,从而实现延迟队列的功能。常见应用场景包括物联网系统的命令超时和电商订单的自动取消。
摘要由CSDN通过智能技术生成

延时队列的概念

场景一:物联网系统经常会遇到向终端下发命令,如果命令一段时间没有应答,就需要设置成超时。

场景二:订单下单之后30分钟后,如果用户没有付钱,则系统自动取消订单。

上述场景都是有一个共同的地方,在物联网在给终端下发命令时,在用户订单下单时,会发送一个消息到队列钟,同时设定改条消息的过期时间,如果终端在过期时间之内响应了物联网的命令或者用户在过期时间之内进行了付款,则会将改条消息删除,否则改条消息机会被消费,告知物联网超时或者用户未在规定时间内付款,自动取消订单。

使用RabbitMQ来实现延迟任务必须先了解RabbitMQ的两个概念:消息的TTL死信Exchange,通过这两者的组合来实现上述需求。

消息的TTL就是消息的存活时间。RabbitMQ可以对队列和消息分别设置TTL。对队列设置就是队列没有消费者连着的保留时间,也可以对每一个单独的消息做单独的设置。超过了这个时间,我们认为这个消息就死了,称之为死信。如果队列设置了,消息也设置了,那么会取小的。所以一个消息如果被路由到不同的队列中,这个消息死亡的时间有可能不一样(不同的队列设置)。这里单讲单个消息的TTL,因为它才是实现延迟任务的关键。

可以通过设置消息的expiration字段或者x-message-ttl属性来设置时间,两者是一样的效果。只是expiration字段是字符串参数,所以要写个int类型的字符串

当消息扔到队列中后,过了60秒,如果没有被消费,它就死了。不会被消费者消费到。这个消息后面的,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值