过期的消息不会从 RabbitMQ 中删除

2024-03-23

我通过生产者向 RabbitMQ 发送一条普通消息,然后发送第二条消息expiration属性分配给一个值。然后使用rabbitmqctl list_queues命令我监视消息的状态。

我发现如果我先发送一条普通消息,然后发送一条消息expiration, the rabbitmqctl list_queues总是向我显示队列中待处理的 2 条消息。当我消耗它们时,我只得到一个。

另一方面,如果我只发送一条消息expiration,一开始我看到该消息,然后在正确的过期时间之后,我发现它被删除了。

我的问题是,第一种情况实际上是消息占用空间吗?或者说这是一个界面错误?

我的rabbitMQ版本是:rabbitmq-server.noarch -> 3.1.5-1.el6


看起来您错过了一些有关此功能的文档。如果您阅读了关于每条消息 TTL(过期)的 RabbitMQ 文档 https://www.rabbitmq.com/ttl.html,您将注意到以下针对您所看到的行为的警告(已添加重点):

Caveats

虽然消费者永远不会看到过期的消息,但只有当过期的消息到达队列的头部时,它们才会真正被丢弃(或死信)。当设置每个队列的 TTL 时,这不是问题,因为过期的消息始终位于队列的头部。然而,当设置每条消息的 TTL 时,过期的消息可以在未过期的消息后面排队,直到后者被消耗或过期。因此,此类过期消息所使用的资源将不会被释放,并且它们将被计入队列统计信息(例如队列中的消息数)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

过期的消息不会从 RabbitMQ 中删除 的相关文章