RabbitMQ:在没有使用者连接时丢弃消息

Lor*_*igs 5 amqp rabbitmq

我正在尝试在一个只有一个生产者和一个使用者的模型中设置RabbitMQ,并且只有当使用者连接时,生产者发送的消息才传递给使用者,而如果消费者不存在则将其丢弃。

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

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

那可能吗?

我看了几件事,但似乎无法使它起作用:

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

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

Lor*_*igs 8

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

将TTL设置为0会导致消息在到达队列时过期,除非可以立即将其传递给使用者

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

事实证明,最简单的解决方案是将其设置x-message-ttl0我的队列。