一.消息隊列消息堆積如何處理?redis
當消息產生的速度長時間遠遠大於消費的速度的時候,就會產生消息的堆積。緩存
新生產的消息轉移到新的隊列,增長新的服務器部署新的消費者來消費。
原來的消息隊列的消息能夠繼續慢慢消費。服務器
2、消息丟失怎麼辦?網絡
消息流通過程 —>生產者—>隊列—>消費者多線程
場景:生產者在投遞消息過程當中,突遇斷網可能丟失消息。ide
解決方案:生產者在消息投遞環節開啓消息確認機制(事物或者comfirm),發送失敗時候重試。性能
場景:隊列服務宕機、重啓,消息丟失。線程
解決方案:投遞消息的時候,交換機、隊列、消息都設置爲持久化durable=true隊列
場景:消費者啓用了自動應答,消費者服務掛掉。內存
解決方案:通道設置每次只處理一條消息,關閉消費者自動應答,消費完成手動應答。
3、有序消費
情形1:多條不冪等消息如消息一、消息二、消息3,採用worker模式投遞,因爲worker模式的消費者是競爭者關係,拿到的消息順序是有問題的。
解決方案:將消息一、消息二、消息3分別投遞進不一樣隊列,每一個隊列對應一個消費者
情形2:消費者開啓了多線程
解決方案:消息隊列分配消息後,建立多個內存隊列,每一個線程消費者去消費內存隊列裏面的消息
4、消息重複消費
出現緣由:消費者消息消息的時候,MQ沒有收到消息的ack應答。
消息冪等性:消息不管怎麼執行都是一樣結果。非冪等性案例:扣款、扣庫存、添加數據。