2016-11-29 73 views
3

我在同一個可用區域和安全組中有兩個Ubuntu EC2實例。 Web服務器正在服務器A上運行,它通過使用php-amqplib通過RabbitMQ將長時間運行作業的請求傳遞迴服務器B.RabbitMQ - 兩個EC2實例間斷的etimedout錯誤

的RabbitMQ服務器在服務器A服務器B上運行的監聽隊列在服務器A

大多數時候,系統工作正常。用戶在Web服務器(服務器A)上執行一個操作,將該作業排入隊列,服務器B接收該消息並執行作業。在這些情況下,RabbitMQ的日誌顯示該請求被服務中的第二:

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

如何調試這個問題:

=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錯誤?我已確認服務器A的RabbitMQ端口在服務器B上運行nmap時似乎處於打開狀態,並且該設置在部分時間運行。關於如何調試失敗案例的任何想法?

回答

0

亞馬遜網絡基礎設施有可能強制關閉服務器之間的「空閒」連接。

嘗試向連接配置添加心跳。這將強制連接保持活動狀態,即使在服務器之間沒有消息移動時也是如此。

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

A 30第二心跳可以是足夠的。如果需要,你可以降低。但我不確定EC2如何確定「空閒」連接。