【问题标题】:RabbitMQ: Auto-clean \ Deleting queues after consuming messageRabbitMQ:自动清理\消费消息后删除队列
【发布时间】:2023-08-15 11:39:01
【问题描述】:

我的应用程序需要连接到 RabbitMQ 队列并使用其中的消息(仅 1 个)。而且我还必须确保在消息被消费后立即删除队列。我一直在寻找一种方法来做到这一点,只需简单的配置。那可能吗?如果是,怎么做?

我正在考虑以下选项:

设置独占为真:

我相信这意味着自动删除也设置为 true(除非专门设置为 false)。当“最后一个消费者被取消”时,队列将被删除。但这实际上意味着什么?这是否意味着一旦消息被消费,它将被删除?这是否也意味着它只能使用声明队列的连接来使用?

将过期参数设置为 x 秒:

我相信这将是一种更简洁的销毁队列的方法。但这里的问题是找到正确的值。来自队列的消息可以在 3 秒内被使用 - 但也可能需要一分钟或更长时间。在这种情况下,它会一直保持到过期秒数 - 即使队列被消耗得更早。

还有更好的选择吗?

【问题讨论】:

    标签: rabbitmq queue


    【解决方案1】:

    RabbitMQ 团队会监控 this mailing list,但有时只会在 * 上回答问题。


    我用google搜索site:rabbitmq.com queue delete,第二次点击的是这个文档:

    https://www.rabbitmq.com/queues.html

    在该文档中,“临时队列”部分声明如下:

    当最后一个消费者被取消(例如使用 AMQP 0-9-1 中的 basic.cancel)或消失(关闭通道或连接,或与服务器的 TCP 连接丢失)时,自动删除队列将被删除。

    这听起来完全符合您的需要。一旦你的消费者读取并确认了单个消息,它就可以断开连接,RabbitMQ 将删除队列。

    独占队列(也记录在该页面上)将仅允许从单个连接进行访问,因此如果您的发布者与您的消费者不同(听起来像),那将不是一个选项。

    【讨论】:

    • 我明白你的意思。但在这种情况下,我们需要明确取消我相信的连接。有没有办法在队列被消耗后立即删除? (无需取消\删除队列)。我相信 expires 也一样,唯一的区别是它会一直持续到指定的到期时间
    • 请在此处跟进-我假设您已交叉发布到邮件列表-groups.google.com/d/topic/rabbitmq-users/PDxRvNNYx9A/discussion