恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
死信队列和延迟队列介绍
首页
资讯中心
/
死信队列和延迟队列介绍
死信队列和延迟队列介绍
发布时间:2026/9/14 21:59:33
死信(dead letter)死信指的是无法被消费者正常消费的消息,在消息队列中,如RabbitMQ中,死信队列就是专门用来存储这些消息的队列.死信的来源1.当消费者设置为手动应答的时候,同时requeuefalse(拒绝接受消息,将消息丢弃),此时这条消息就是死信.2.消息超过了队列设置的TTL(超时时间),此时超过时间还没被处理的的就是死信.3.队列满了.队列也可以设置长度,超过的就是死信.死信队列的使用场景对于RabbitMQ,当可以用死信队列来进行处理上面的三种情况.当消费者1出现情况导致消息的消费异常,此时就可以将死信发送给死信队列,再让其他的消费者监听死信队列,这样可以防止死信影响正常的程序,改善和优化系统.延迟队列(Delayed queue)延迟队列指的是消息发送后,并不想直接给消费者,而是经过一段时间后再给消费者.延迟队列可以实现很多场景,例如智能家电中想要家电在一定时间自动开启,此时可以将命令放入延迟队列中,当指令到设置时间就会自动发送到设备.还有当用户注册后,可以在一定时间内发送短信,提升用户活跃度.延迟队列的使用在RabbitMQ中没有直接的延迟队列使用,但是我们可以通过TTL死信队列的方式来实现.例如需要一个10秒的延迟将消息发送给用户,我们可以将消息设置为10秒的过期时间,10秒过后,此时消息就过期了,再将这个消息发送给死信队列,在设置专门的消费者对死信队列监听,此时就模拟了延迟队列的实现.但是此种方法实现的延迟队列会出现问题,RabbitMQ只会检查队首的消息是否过期,如果第二个消息的过期时间比队首短,此时就会等队首消息过期后在发送给死信队列.延迟队列插件RabbitMQ中有一个专门实现延迟队列的插件:https://www.rabbitmq.com/blog/2015/04/16/scheduling-messages-with-rabbitmq对比基于死信实现的延迟队列优点: 1) 灵活不需要额外的插件⽀持缺点: 1) 存在消息顺序问题 2) 需要额外的逻辑来处理死信队列的消息, 增加了系统的复杂性基于插件实现的延迟队列优点: 1) 通过插件可以直接创建延迟队列, 简化延迟消息的实现. 2) 避免了DLX的时序问题缺点: 1) 需要依赖特定的插件, 有运维⼯作 2) 只适⽤特定版本