我有120个Kubernetes pod连接到相同的RabbitMQ队列并消费消息(所有Python代码相同)。当队列中有消息时,消费者pod会触发。队列中有数千条消息,但不是所有的使用者都能收到消息,如果我重新启动pod,有时它会开始接收消息,有时则不会。在rabbitmq管理中,我看到120个活跃的消费者状态为up。一切看起来都很好。但不是所有的消费者都能正常工作。可能是什么问题?或者我怎样才能进一步检查?谢谢!
3htmauhk1#
此doc帮助您了解有关使用消息的更多信息查看使用者代码,因为它可能正在运行,但陷入RabbitMQ异常,我建议使用者无法使用排队的消息,因为使用"RabbitMQ.Client"。使用"QueueingBasicConsumer"使消息出队,队列突然关闭,即使使用者正在运行并在系统中。IO. EndOfStreamException"auto acknowledge"是basicConsume方法的第二个参数,如果这个参数设置为true,消费者将立即通知RabbitMQ消息已经被确认。即使basicQos设置为1,只要autoAck设置为true,使用者几乎肯定会收到队列中的下一条可用消息。这是因为客户立即降低了第一个限制,以表明它不再有消息,可以接受下一条消息。与基本QoS设置1结合使用时,将auto ack参数更改为false可防止此问题。有关详细信息,请参阅此stack link
1条答案
按热度按时间3htmauhk1#
此doc帮助您了解有关使用消息的更多信息
查看使用者代码,因为它可能正在运行,但陷入RabbitMQ异常,我建议使用者无法使用排队的消息,因为使用"RabbitMQ.Client"。使用"QueueingBasicConsumer"使消息出队,队列突然关闭,即使使用者正在运行并在系统中。IO. EndOfStreamException
"auto acknowledge"是basicConsume方法的第二个参数,如果这个参数设置为true,消费者将立即通知RabbitMQ消息已经被确认。
即使basicQos设置为1,只要autoAck设置为true,使用者几乎肯定会收到队列中的下一条可用消息。这是因为客户立即降低了第一个限制,以表明它不再有消息,可以接受下一条消息。
与基本QoS设置1结合使用时,将auto ack参数更改为false可防止此问题。
有关详细信息,请参阅此stack link