1. 程式人生 > >訊息佇列任務丟失的原因

訊息佇列任務丟失的原因

有時:一個非同步處理的操作正常的放到了非同步佇列裡,但是並沒有被處理,或者資料庫用改動,但是消費的binlog日誌並沒有改動資訊,造成這種的原因是什麼?對此進行一定猜測,訊息佇列是不安全的,會丟失任務(如kafka)?
相比之下,寫定時任務,去資料庫裡掃表,拿出處理中的訂單,去挨個輪詢狀態。這樣比較準確,但是對效能有損耗,對資料庫造成額外壓力,並且非實時。

任務丟失的一些猜想:
reids 的list可以作為訊息佇列來使用。當消費者從list中取出訊息時redis就已經將訊息刪除,此時如果消費者消費失敗,或者因為異常、不可抗拒因素(宕機等)時,可能會導致訊息丟失的情況。

但是也可以使用RPOPLPUSH這些命令去彌補,當消費完成後再去進行刪除,保證訊息的可靠性。

當然有很多佇列都是有可靠消費的保證,當你消費完成後,再次向佇列傳送完成的確認,佇列才會刪除訊息。