心之所向,勇往直前!
簡單歸納消息隊列相關的面試題
正文
1. MQ的作用是什麼?
解耦、異步、削峯
2. 如何保證消息隊列的冪等性?
a. 消費操作時可以先校驗數據是否重複再寫入
b. 數據表設置唯一索引
c. 丟到redis裏(分佈式鎖)
3. 如何保證消息隊列的可靠性?
a. Confirm模式/啓用事務
b. 啓用持久化
c. ACK應答機制
4. 你是如何解決死信問題的?
a. Rabbitmq可以設置死信交換機
b. 可以自行實現一個緩存區,將死信消息先丟到緩存區,再跑定時任務檢測重新發送
5. 什麼情況下消息會進入死信隊列?
a. 消息被拒收
b. 消息過期
c. 隊列最大長度滿了
6. 怎麼實現延時隊列?
使用TTL + 死信隊列實現
7. 設置TTL的方式有幾種,分別是什麼?
有兩種方式,基於隊列設置、基於消息設置。如果同時使用了兩種方式,則優先時間最小的
8. 如何保證消息的順序消費?
出現亂序的可能是1個queue有多個consumer,或者只有1個consumer時使用了多線程處理
a. 保證一個queue只有1個消費者
b. 如果存在多個消費者,就拆分多個queue將屬於同一個業務id的操作推送到1個queue,以此確保每個queue都是隻有1個消費者。
9. 出現消息大量積壓如何處理?
a. 可以增加多個consumer進行消費
b.
結語
本篇到此結束,如果有任何疑問或者指正,請發表在評論區。