【问题标题】:Messages with expiration are not removed from RabbitMQ过期的消息不会从 RabbitMQ 中删除
【发布时间】:2015-03-15 12:04:33
【问题描述】:

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

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

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

我的问题是,第一种情况实际上是消息占用空间吗?还是界面bug?

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

【问题讨论】:

标签: rabbitmq messages ttl


【解决方案1】:

您似乎错过了有关此功能的一些文档。如果您阅读RabbitMQ documentation on per-message TTL (expiration),您会注意到以下警告,正是您所看到的行为(已添加重点):

注意事项

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

【讨论】:

    猜你喜欢
    • 2022-06-10
    • 2015-12-20
    • 1970-01-01
    • 2013-09-05
    • 2011-12-29
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多