php - RabbitMQ 错误超时

标签 php ubuntu nginx rabbitmq php-amqplib

我已经设置了 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/

相关文章:

PHP:十六进制到 CMYK

php - 在递归函数中获取 xml 节点的 xpath

laravel - 在 Ubuntu 14.04 控制台上运行 Vagrant

linux - shell找不到nginx

wordpress nginx ssl 重定向循环

php - mySQL select with PHP - left join

linux - 如何在 Visual Code 中的集成终端之间切换?

c++ - 无法将创建的 .so 文件链接到 main.cpp

nginx - 如果应用程序映射到子目录,如何在 Nginx + Flask 设置中加载静态文件

php - Laravel 记录到 Slack 工作簿导致 "Curl error (code 3): <url> malformed"