使用Spring AMQP(RabbitMQ的):RabbitMQ的連接超時異常
我的消費者花費相當多的時間來處理郵件,有時我的業務邏輯需要2個多小時,但隨後的處理後,當我嘗試承認的RabbitMQ對於「基本ack」它會引發連接超時異常。
我該怎麼辦?我應該永遠連接還是使用心跳?
使用Spring AMQP(RabbitMQ的):RabbitMQ的連接超時異常
我的消費者花費相當多的時間來處理郵件,有時我的業務邏輯需要2個多小時,但隨後的處理後,當我嘗試承認的RabbitMQ對於「基本ack」它會引發連接超時異常。
我該怎麼辦?我應該永遠連接還是使用心跳?
如果你的邏輯絕對是基於MANUAL ack的,那麼除非讓你的連接長久生活,否則你確實沒有選擇。無論如何,心跳應該在默認情況下存在。
否則考慮使用AUTO ack解決方案,如果發生錯誤,則下游只是將消息發回隊列以供將來使用。如果您有任何依賴性或者演員的成功與否,在案例:
考慮與持久的業務操作開始之後荷蘭國際集團ACK-後來告知有關其狀態的另一種選擇。如果你想讓這個過程真的是異步的 - 你的服務消費了一條消息,並開始做一些事情:好吧,讓我們來看看這個消息承認這一點。如果您需要重複失敗,請在出現失敗後再單獨發送消息,以便其他消費者可以接受並處理該消息。
只要配置了心跳(默認情況下),連接應保持打開狀態。然而,在這樣的狀態下保存這麼久的信息是非常不尋常的。這是消息傳遞的反模式;將持久運行的任務保存在持久性存儲庫(如數據庫)中通常會更好。 –