RabbitMQ 死信队列和延时队列
TTL(Time To Live)
- 消息的TTL就是消息的存活时间
- RabbitMQ中对队列、消息都可以设置TTL
- 对队列设置TTL,就是队列没有消费者连着的保留时间;对消息设置TTL,超过了这个时间,消息就死了,称之为死信。
- 如果队列设置了,消息也设置了,那么会取小的。所以一个消息如果被路由到不同的队列中,这个消息死亡的时间有可能不一样(不同的队列设置)。这里单讲单个消息的TTL,因为它才是实现延迟任务的关键。可以通过设置消息的expiration字段或者x-message-ttl属性来设置时间,两者是—样的效果。
死信队列
概念
- 死信队列:DLX,dead-letter-exchange。利用DLX,当消息在一个队列中变成死信 (dead message) 之后,它能被重新publish到另一个Exchange,这个Exchange就是DLX。DLX同时也是一个正常的交换机,它们可以像普通的交换机一样使用。
- 延迟队列:利用死信可以实现延迟队列。 比如设置队列有限期为60s,到期移动到另一个队列。比如订单30s,30s之后移动到另一个死信队列,我们可以监听另一个死信队列。
可以进入死信路由的情况
-
被consumer拒收的消息,并且reject方法的参数里requeue是false(不会重新入队)
-
TTL过期的消息
-
队列消息满了,排在前面的消息会被丢弃或进入死信路由
死信Exchange其实就是普通的Exchange
队列设置好自己的Dead Letter Exchange,当此队列中的消息过期后会被转发到这个路由,被称为死信路由
标签:Exchange,队列,RabbitMQ,死信,消息,设置,TTL From: https://www.cnblogs.com/malongfeistudy/p/16729411.html