RabbitMQ:当没有消费者连接时丢弃消息
我试图在只有一个生产者和一个消费者的模型中设置RabbitMQ,并且只有当消费者连接时生产者发送的消息才被传递给消费者,但如果消费者不在,则消失。
基本上我希望队列放弃所有收到的消息时,没有消费者连接到它。
另一个限制是队列必须在RabbitMQ服务器端声明,并且不能由消费者或生产者明确创建。
那可能吗?
我已经看了一些东西,但我似乎无法使其工作:
auto_delete
设置为true意味着我的客户端永远不能再次连接到此队列。 x-message-ttl
和max-length
可以在消费者连接时丢失信息。 我正在寻找的效果就像断开时的auto_delete
和连接时的auto_create
。 rabbitmq中有没有一种机制可以让我做到这一点?
经过多一点研究后,我发现我的关于x-message-ttl
问题中的一个假设是错误的。 我忽略了RabbitMQ文档中的一句话:
将TTL设置为0会导致消息到达队列时过期,除非它们可以立即传送给使用者
https://www.rabbitmq.com/ttl.html
事实证明,最简单的解决方案是在我的队列中将x-message-ttl
为0
。
你不能直接做,但有一个机制不难实施。
您必须启用事件交换插件。 这是一个交换机,您的服务器应用程序可以连接并接收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?