我创建了一些连接到Rabbitmq中的队列的消费者,每次都需要10,50,100个消息,以避免不必要的连接 . 有时我们遇到队列几乎为空的情况,只有一个消费者获得了所有消息 . 不幸的是,其中一条消息可能处理缓慢(例如第三方Web服务超时),而其他所有消息都必须排队等待,即使它们更快 . 虽然这样,其他消费者都是空的,无所事事,但他们无法接收第一个仍未处理的消息 .
如果我可以向Rabbitmq发送一些消息给消费者,如果它在一段时间后没有确认,那么按摩必须被送到队列并被另一个消费者带走 . 有人知道是否有解决方法?
2 回答
看看我的answer to this question .
我相信你所看到的是你将
AutoAck
设置为true的情况 . 当发生这种情况时,如果没有其他消费者在有机会之前连接,第一个连接的消费者将耗尽整个队列 . 尝试将AutoAck
设置为false,然后选择合理的预取计数(0-1可能?),您将不会看到此行为继续 .Autoack是假的,但我有一个很高的预取,就像50条消息一样,因为我想减少对Rabbit的调用 . 目前我将预取更改为5,因此当消息冻结时,消费者将只保留5条消息 . 我正在监控Rabbit服务器的性能,但我担心在高峰期消耗 . 谢谢你们的帮助 .