RabbitMQ - 两个EC2实例之间的间歇性etimedout错误

时间:2016-11-29 00:17:51

标签: php ubuntu amazon-ec2 rabbitmq

我在同一可用区和安全组中有两个Ubuntu EC2实例。 Web服务器正在服务器A上运行,它使用php-amqplib通过RabbitMQ将长时间运行的作业请求传递回服务器B.

RabbitMQ服务器正在服务器A上运行。服务器B正在侦听服务器A上的队列。

大多数情况下,系统按预期工作。用户在Web服务器(服务器A)上执行操作,该操作将作业排入队列,服务器B接收消息并完成作业。在这些情况下,RabbitMQ日志显示在一秒内提供服务的请求:

=INFO REPORT==== 29-Nov-2016::00:07:11 ===
accepting AMQP connection <0.31632.2> (###.###.###.###:51968 -> ###.###.###.###:5672)

=INFO REPORT==== 29-Nov-2016::00:07:11 ===
closing AMQP connection <0.31632.2> (###.###.###.###:51968 -> ###.###.###.###:5672)

但是,在执行相同的请求时,我间歇性地出现etimedout错误:

=ERROR REPORT==== 28-Nov-2016::21:56:51 ===
closing AMQP connection <0.21543.0> (###.###.###.###:56827 -> ###.###.###.###:5672):
{inet_error,etimedout}

如何调试此问题?我已经确认,在服务器B上运行nmap时,服务器A的RabbitMQ端口似乎已打开,并且设置部分工作。关于如何调试失败案例的任何想法?

1 个答案:

答案 0 :(得分:0)

亚马逊网络基础设施可能会强行关闭服务器之间的“空闲”连接。

尝试在连接配置中添加心跳。即使服务器之间没有消息移动,这也会强制连接保持活动状态。

https://www.rabbitmq.com/heartbeats.html

30秒的心跳可能就足够了。如果需要,你可以降低。我不确定EC2如何确定“空闲”连接。