1. 程式人生 > 其它 >rabbitmq訊息丟失問題

rabbitmq訊息丟失問題

1. 丟失訊息場景

(1)生產者寫訊息網路丟失

(2)rabbitmq收到訊息,mq故障

(3)消費者收到訊息後,消費者故障

 

 

2. 對應處理方案

(1)生產者弄丟了資料

       <1> 基於事務,rabbitmq報錯,則回滾重發

   問題:事務機制,是同步的,會卡主等待訊息傳送成功,會導致生產者傳送訊息的吞吐量下降

       <2> confirm模式,生產者傳送一個訊息,就不用管了

          rabbitmq收到訊息後,會回撥生產者本地介面,通知收到

       rabbitmq收到訊息波按錯會回撥生產者本地介面,通知接受失敗,可以重發

    優點:可以直接發下一條訊息,非阻塞 非同步,吞吐量高

(2)rabbitmq弄丟資料

   讓rabbitmq把訊息持久化到磁碟(持久化元資料 + 持久化資料)

   但會出現rabbitmq收到訊息還未持久化到磁碟,rabbitmq掛了,仍然會丟失資料,但可能性已下降很多

(3)消費者弄丟資料

  消費者拿到資料後,會通知rabbitmq資料已接收,但還沒處理此時消費者宕機,會出現訊息丟了 (rabbitmq以為已經處理完成)

  解決方案:消費者端,關閉autoAck,在確實處理完資料後,再向rabbitmq傳送ack