我的应用程序需要连接到RabbitMQ队列并使用其中的消息(只有1个)。我还必须确保在使用消息之后立即删除队列。我一直在寻找一种方法来做到这一点,用简单的配置。这可能吗?如果是,如何进行?
我在考虑以下几种选择:
- 设置独占为true:*
我相信这意味着自动删除也被设置为true(除非特别设置为false)。当“最后一个消费者被取消”时,队列将被删除。但这实际上意味着什么呢?这是否意味着一旦消息被消费,它就会被删除?这是否也意味着它只能使用声明队列的连接来使用?
- 将过期参数设置为x秒:*
我相信这将是一种更干净的方式来破坏队列。但这里的问题是找到正确的值。来自队列的消息可以在3秒内被消耗-但也可能需要一分钟或更长时间。在这种情况下,它将一直保留到过期秒-即使队列的消耗要早得多。
- 是否有更好的选择?*
1条答案
按热度按时间vm0i2vca1#
我用谷歌搜索
site:rabbitmq.com queue delete
,第二个命中是这个文件:https://www.rabbitmq.com/queues.html
在该文件中,“临时拘留”一节规定如下:
自动删除队列将在其最后一个消费者被取消时被删除(例如,在AMQP 0-9-1中使用基本的.cancel)或消失(关闭通道或连接,或丢失与服务器的TCP连接)。
这听起来正是你需要的。一旦你的消费者读取并确认了这条消息,它就可以断开连接,RabbitMQ将删除队列。
独占队列(也在该页面上有记录)只允许从单个连接访问,因此如果您的发布者与您的消费者不同(听起来像),这将不是一个选项。