我已经设置了 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
非常感谢您的宝贵时间和意见!
最佳答案
我刚刚在 python 中解决了类似的问题。在我的例子中,它是通过减少消费者的预取计数来解决的,这样它在接收缓冲区中排队的消息就更少了。
我的理论是消费者的接收缓冲区已满,然后 RMQ 尝试将一些其他消息写入消费者的套接字,但由于消费者的套接字已满而无法写入。 RMQ 阻塞在这个套接字上,最终超时并关闭消费者的连接。 具有较小的预取队列意味着套接字接收缓冲区不会被填满,并且 RMQ 能够写入它试图执行的任何簿记消息,因此不会在其写入时超时或关闭连接。
虽然这只是一个理论,但它似乎在我的测试中成立。
在 Python 中,可以像这样设置预取计数:
subChannel.basicQos(10);
(感谢@shawn-guo 提醒我添加这段代码)
关于php - RabbitMQ 错误超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35438843/