2016-01-11 36 views
10

我的應用程序連接到rabbitMQ。有時,它會拋出一個AMQPTimeoutException。更具體地講「發送錯誤數據的Socket連接超時。」捕捉異常並繼續執行程序是最佳實踐嗎?

我的解決辦法:

我趕上了AMQPTimeoutException和打電話給我重新連接方法。之後程序繼續它的正常執行。另外我設置了一個標誌,以便異常最多處理3次。

try 
{ 
    sendMethod($message); 
} catch (AMQPTimeoutException $e) { 
     echo "caught socket connection exception". "\n"; 
     $this->reconnect($message, $exchangeName, $queue); 
    } 
//reconnect internally checks the flag 

我的問題:這是最佳做法嗎?如果沒有其他解決方案是可能的?

注意:該應用程序是用PHP編寫的。

+0

在這種情況下,對我來說似乎很好。如果3次嘗試失敗會發生什麼? – Clay

+0

這真的是最好的做法..在用戶上顯示錯誤信息不僅可能給用戶帶來麻煩,而且會給系統中的黑客創建漏洞 –

+0

@clayton程序退出 – user3452275

回答

6

是的。

應該始終抓住並處理異常情況。這當然是最好的做法。例外是一種語言中的控制流結構,它允許程序員處理他們不希望發生或很少發生的事情。

在您的場景中,在套接字中捕獲異常是完全合理的。 TCP/IP通信並不完美,取決於廣泛的條件在某個時間點,套接字故障是100%確定的。

我會推薦的是,你開始記錄爲什麼這些套接字超時發生。通常他們是由資源枯竭引起的,但它在哪裏?服務器A或服務器B ...或客戶端...

超時是需要調查的問題的症狀。當你正確地處理它們時,我強烈建議增加一些日誌記錄來找出它們發生的原因。