RabbitMQ:当没有消费者连接时丢弃消息

我试图在只有一个生产者和一个消费者的模型中设置RabbitMQ,并且只有当消费者连接时生产者发送的消息才被传递给消费者,但如果消费者不在,则消失。

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

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

那可能吗?

我已经看了一些东西,但我似乎无法使其工作:

  • 耐用与非耐用不起作用,因为它只在代理重新启动时才有用。 我需要相同的效果,但在连接上。
  • 在队列auto_delete设置为true意味着我的客户端永远不能再次连接到此队列。
  • x-message-ttlmax-length可以在消费者连接时丢失信息。
  • 我已经看过话题交换,但据我所知,这些仅影响基于消息内容的交换和队列之间的消息路由,并且不能考虑队列是否已连接消费者。
  • 我正在寻找的效果就像断开时的auto_delete和连接时的auto_create 。 rabbitmq中有没有一种机制可以让我做到这一点?


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

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

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

    事实证明,最简单的解决方案是在我的队列中将x-message-ttl0


    你不能直接做,但有一个机制不难实施。

    您必须启用事件交换插件。 这是一个交换机,您的服务器应用程序可以连接并接收RabbitMQ的内部事件。 您会对consumer.created和consumer.deleted事件感兴趣。

    当收到这些事件时,您可以触发一个操作(创建或删除您需要的队列)。 更多信息请访问:https://www.rabbitmq.com/event-exchange.html

    希望这可以帮助。


    如果您的客户允许在代理的启动/停止过程中动态绑定/取消绑定队列,则应该可以通过这种方式(例如,队列已预先设置,并且客户在启动期间将队列绑定到想要从中接收消息的交换)

    链接地址: http://www.djcxy.com/p/59243.html

    上一篇: RabbitMQ: dropping messages when no consumers are connected

    下一篇: How long RabbitMQ keeps the messages for disconnected consumers?