gpt4 book ai didi

RabbitMQ:当没有消费者连接时删除消息

转载 作者:行者123 更新时间:2023-12-02 21:59:07 32 4
gpt4 key购买 nike

我正在尝试在只有一个生产者和一个消费者的模型中设置 RabbitMQ,并且只有在消费者连接时,生产者发送的消息才会传递给消费者,但如果消费者不存在,则消息会被丢弃.

基本上,我希望队列在没有消费者连接时丢弃它收到的所有消息。

另一个约束是队列必须在 RabbitMQ 服务器端声明,并且不能由消费者或生产者显式创建。

这可能吗?

我看了一些东西,但我似乎无法让它发挥作用:

  1. 持久性与非持久性不起作用,因为它仅在代理重新启动时才有用。我需要相同的效果,但需要连接。
  2. 在队列上将 auto_delete 设置为 true 意味着我的客户端永远无法再次连接到该队列。
  3. x-message-ttlmax-length 使得即使有消费者连接也可能丢失消息。
  4. 我研究过主题交换,但据我所知,这些仅影响基于消息内容的交换和队列之间的消息路由,而不能考虑队列是否存在已连接消费者。

我正在寻找的效果类似于断开连接时的 auto_delete 和连接时的 auto_create 。 rabbitmq 中有没有一种机制可以让我做到这一点?

最佳答案

经过更多研究后,我发现我的问题中有关 x-message-ttl 的假设之一是错误的。我忽略了 RabbitMQ 文档中的一句话:

Setting the TTL to 0 causes messages to be expired upon reaching a queue unless they can be delivered to a consumer immediately

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

事实证明,最简单的解决方案是在我的队列上将 x-message-ttl 设置为 0

关于RabbitMQ:当没有消费者连接时删除消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45327819/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com