我已經編寫了一個Spring應用程序,該應用程序正在RabbitMQ Client API中手動實現RabbitMQ。在RabbitMQ中正確處理UnknownHostException,阻止自動恢復
連接工廠和連接的設置方式類似於教程:
public class Recv {
private final static String QUEUE_NAME = "hello";
public static void main(String[] argv)
throws java.io.IOException,
java.lang.InterruptedException {
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("122.34.1.1");
factory.setPort(5672);
factory.setUsername("user");
factory.setPassword("password")
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
System.out.println(" [*] Waiting for messages. To exit press CTRL+C");
...
}
}
的連接工作正確。但是,如果我關閉了主機服務器,我的應用程序似乎陷入某種循環,試圖通過持續關閉關閉的主機來嘗試自動恢復。
因此,我的控制檯中充滿了大量堆棧軌跡,它們表示「UnknownHostException」。根據蹤跡的確切位置是該行:
Connection connection = factory.newConnection();
我試圖把一個try-catch塊圍繞這條線,但是這似乎並沒有在所有的工作。
如果傳統的try-catch塊無法處理來自連接的異常,那麼捕獲異常並停止創建此循環的自動恢復的正確方法是什麼?
謝謝。
感謝您的回答。但對於我的應用程序,我試圖手動啓動每個組件,包括連接。使用bean方法意味着所有資源都在應用程序的開始時建立。你知道是否有適當的方法可以應用於連接以確保正常處理異常和自動恢復嗎? – pike
那麼,畢竟,彈簧啓動完全是關於配置的約定。所以我不會試圖重新發明輪子。但是,您也可以使用 擴展異常並將其丟棄。 Spring有一些很酷的註釋來編寫異常處理程序方法。在那邊你可以手動關閉它,或者做適合你需求的任何東西。 –