1. 程式人生 > >rabbitMQ如何避免訊息的丟失?

rabbitMQ如何避免訊息的丟失?

RabbitMQ中,訊息丟失可以簡單的分為兩種:客戶端丟失和服務端丟失。針對這兩種訊息丟失,RabbitMQ都給出了相應的解決方案。

 

生產者P向佇列中生產訊息,C1和C2消費佇列中的訊息,預設情況下,RabbitMQ會平均的分發消費給C1C2(Round-robin dispatching),假設一個任務的執行時間非常長,在執行過程中,客戶端掛了(連線斷開),那麼,該客戶端正在處理且未完成的訊息,以及分配給它還沒來得及執行的訊息,都將丟失。因為預設情況下,RabbitMQ分發完訊息後,就會從記憶體中把訊息刪除掉。

 

為了解決上述問題,RabbitMQ引入了訊息確認機制,當訊息處理完成後,給Server端傳送一個確認訊息,來告訴服務端可以刪除該訊息了,如果連線斷開的時候,Server端沒有收到消費者發出的確認資訊,則會把訊息轉發給其他保持線上的消費者。

 

通過訊息確認機制(Acknowlege)來實現,當消費者獲取訊息後,會想mq傳送回執ACK,告知訊息已經被接收。