消息隊列防止消息不丟失

1、 生產者發送消息到broker失敗;生產者使用事務消息。
2、 Broker集群主從同步失敗;兩階段提交,多數節點成功后提交。
3、 MQ異步刷盤,可能會消息丟失;改為同步刷盤。
4、 Broker發送消息到消費者失敗;消費者ack機制。
5、 MQ集群掛掉了,生產者無法發送消息到MQ;消息臨時存儲在redis、文件或數據庫中。


事務狀態為unknown狀態,MQ會循環重試4567步驟。
1-2:half機制確認MQ是否正常。
3:執行本地事務失敗(如數據庫掛了),會將消息存儲起來。MQ重試機制至本地事務成功后執行后面的操作。
6:下單支付鏈路中,如要求下單后10分鍾完成支付。MQ重試機制,下單后支付狀態為unknown,最多重試10次檢查支付狀態是否成功,成功則commit,失敗則rolllback。








MQ掛了,生產者把消息存盤,redis、文件或數據庫等。定時任務掃描把消息發送到恢復后的MQ中。







1、 增加隊列數量,多個消費者消費隊列的消息;
2、 無法動態擴容的情況下,增加topic,增加queue

