首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >RabbitMQ:如何自动删除队列?

RabbitMQ:如何自动删除队列?
EN

Stack Overflow用户
提问于 2021-12-17 11:38:52
回答 2查看 761关注 0票数 1

我有N个顾客,他们每个人都有自己的队列使用扇形交换:q-1que-2.Que

发布者将消息发布到扇形交换,即Publisher->pub msg->(对所有Que-1 - Que-N)

每个客户都会读取自己的队列客户i- reads Que-i。

问题是:

我如何解决这个问题:如果没有客户在K分钟内阅读这个Que-*,那么这个Que应该用消息删除。也就是说,发布者可以发布消息,但如果没有客户阅读,则应该删除它。

EN

回答 2

Stack Overflow用户

发布于 2021-12-18 08:34:46

参数x-expires完成了我所需的任务:

代码语言:javascript
运行
复制
Map<String, Object> args = new HashMap<String, Object>();
args.put("x-expires", 1800000);
channel.queueDeclare("myqueue", false, false, false, args);
票数 1
EN

Stack Overflow用户

发布于 2022-02-08 07:09:26

TTL也可以设置在队列上,而不仅仅是队列内容。队列只有在没有使用时才会在一段时间后过期(例如,没有使用者)。此特性可与自动删除队列属性一起使用。

可以通过将x-expires参数设置为queue.declare或通过设置expires策略来设置给定队列的过期时间。这控制队列在被自动删除之前可以被使用多久。未使用意味着队列没有使用者,队列最近没有被重新声明(重新声明更新租约),并且至少在过期期间没有调用basic.get

x-expires参数或expires策略的值描述过期时间(以毫秒为单位)。它必须是正整数(与message不同,不能是0)。因此,值1000意味着将删除一个未使用1秒的队列。

使用策略为队列定义队列TTL

以下策略使所有队列在上次使用后30分钟后过期:

代码语言:javascript
运行
复制
rabbitmqctl set_policy expiry ".*" '{"expires":1800000}' --apply-to queues

在声明期间使用x参数为队列定义队列TTL。

Java中的这个示例创建了一个队列,该队列在未使用30分钟后过期。

代码语言:javascript
运行
复制
Map<String, Object> args = new HashMap<String, Object>();
args.put("x-expires", 1800000);
channel.queueDeclare("myqueue", false, false, false, args);

有关详细信息,请参阅下面的链接:

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70392605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档