您的位置:首页 > 科技 > 能源 > RabbitMQ:浅谈死信队列、延时队列

RabbitMQ:浅谈死信队列、延时队列

2024/12/23 10:35:18 来源:https://blog.csdn.net/qq_29229567/article/details/141817681  浏览:    关键词:RabbitMQ:浅谈死信队列、延时队列

一、过期消息

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

  • 1、队列设置:在队列申明的时候使用 x-message-ttl 参数,单位为毫秒。
  • 2、单个消息设置:是设置消息属性的 expiration 参数的值,单位为毫秒。

二、死信队列

DLX(Dead Letter Exchange),死信交换器。

当队列中的消息被拒绝、或者过期会变成死信,死信可以被重新发布到另一个交换器,这个交换器就是DLX,与DLX绑定的队列称为死信队列。

造成死信的原因:
(1)信息被拒绝;
(2)信息超时;
(3)超过了队列的最大长度。

三、延迟队列

延迟队列存储的是延迟消息。

延迟消息指的是,当消息被发发布出去之后,并不立即投递给消费者,而是在指定时间之后投递。如:在订单系统中,订单有30秒的付款时间,在订单超时之后在投递给消费者处理超时订单。

RabbitMQ没有直接支持延迟队列,可以通过死信队列实现。在死信队列中,可以为普通交换器绑定多个消息队列,假设绑定过期时间为5分钟,10分钟和30分钟,3个消息队列,然后为每个消息队列设置DLX,为每个DLX关联一个死信队列。当消息过期之后,被转存到对应的死信队列中,然后投递给指定的消费者消费。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com