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

不会从RabbitMQ中删除过期的消息,rabbitmq,messages,ttl,Rabbitmq,Messages,Ttl,我通过一个生产者向RabbitMQ发送一条普通消息,然后我发送第二条消息,并将expiration属性指定给一个值。然后使用rabbitmqctl list\u队列命令监视消息的状态 我发现,如果我先发送一条普通消息,然后发送一条带有过期时间的消息,则rabbitmqctl列表队列总是向我显示队列中挂起的两条消息。当我吃掉它们时,我只得到一个 另一方面,如果我只发送一条过期的消息,在开始时我会看到该消息,然后在正确的过期时间之后,我会发现它被删除了 我的问题是,在第一种情况下,信息是否真的占据了

我通过一个生产者向RabbitMQ发送一条普通消息,然后我发送第二条消息,并将
expiration
属性指定给一个值。然后使用
rabbitmqctl list\u队列
命令监视消息的状态

我发现,如果我先发送一条普通消息,然后发送一条带有
过期时间的消息,则
rabbitmqctl列表队列总是向我显示队列中挂起的两条消息。当我吃掉它们时,我只得到一个

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

我的问题是,在第一种情况下,信息是否真的占据了空间?或者它是一个接口错误

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

看起来您错过了有关此功能的一些文档。如果您阅读了,您会注意到以下关于您所看到的行为的警告(添加了强调):

警告 虽然消费者永远看不到过期消息,但只有当过期消息到达队列头时,它们才会被丢弃(或死信)。当设置每队列TTL时,这不是问题,因为过期消息总是在队列的最前面但是,当设置每封邮件的TTL时,过期邮件可以排在非过期邮件之后,直到后者被消费或过期。因此,此类过期邮件使用的资源不会被释放,它们将被计入队列统计信息中(例如,队列中的邮件数)


相关报道:这很有帮助。谢谢