兔子MQ错误超时

2022-08-30 20:34:08

我已经设置了RabbitMQ,以便解析来自外部API的大约20.000个请求,但它在几分钟后就会超时。它确实可以正确解析总共20.000个请求中的大约2000个。

日志文件显示:

=INFO REPORT==== 16-Feb-2016::17:02:50 ===
accepting AMQP connection <0.1648.0> (127.0.0.1:33091 -> 127.0.0.1:5672)

=ERROR REPORT==== 16-Feb-2016::17:03:21 ===
closing AMQP connection <0.1648.0> (127.0.0.1:33091 -> 127.0.0.1:5672):
{writer,send_failed,{error,timeout}}

我已经增加了心跳值,但我无法弄清楚为什么它超时。配置是:Ubuntu 14.04,NGINX 1.8.1,RabbitMQ 3.6.0

感谢您的时间和投入!


答案 1

我刚刚在python中解决了类似的问题。在我的情况下,它是通过减少消费者的预取计数来解决的,这样它就有更少的消息在其接收缓冲区中排队。

我的理论是,消费者的接收缓冲区变满,然后RMQ试图将一些其他消息写入消费者的套接字,但由于消费者的套接字已满而无法做到。RMQ 阻止此套接字,并最终超时,只是关闭使用者上的连接。具有较小的预取队列意味着套接字接收缓冲区不会被填满,并且RMQ能够写入它尝试执行的任何簿记消息,因此不会在其写入时超时或关闭连接。

虽然这只是一个理论,但它似乎在我的测试中成立。

在Python中,设置预取计数可以像这样完成:

subChannel.basicQos(10);

(感谢@shawn-guo提醒我添加这个代码片段)


答案 2

@tul的答案中添加更多内容。

subChannel.basicQos(10); 

减少使用者预取计数确实消除了此超时异常。
默认预回迁计数不受限制。


推荐