應用場景
用戶註冊,註冊成功之後進行郵件通知,初始化客戶數據等操作,可以丟進消息隊列,通知對應的業務服務進行相應的操作,保證用戶註冊的性能。
MQ優點
- 異步
- 消峯
- 解耦
消息隊列利用”發佈-訂閱“工作,消息發送者發送消息至分佈式消息隊列即結束對消息的處理,消息接收者從消息隊列讀取消息進行後續處理。對新增業務,只要對該類消息感興趣,即可訂閱該消息,對原有系統和業務沒有任何影響,從而實現網站業務的可擴展性設計。
MQ缺點
- 提高系統的設計複雜度
- 系統可用性降低
常見問題
- 如何提高MQ系統可用性
ActiveMQ的高可用性架構是基於Master/Slave 模型的,使用Replicated LevelDB Store模式,這種模式基於Zookeeper 進行選舉Master,其他節點則爲slave,Master負責接收消息和同步消息給slave,slave負責接收同步master消息。 - 如果避免消息重複消費
給消息設置唯一主鍵,消費時判斷是否已經消費過此數據 - 消息丟失怎麼辦
使用mq持久化信息 - 怎麼保證從消息隊列裏拿到的數據按順序執行
沒找到ActiveMq的
rabbitmq:拆分多個queue,每個queue一個consumer,就是多一些queue而已,確實是麻煩點;或者就一個queue但是對應一個consumer,然後這個consumer內部用內存隊列做排隊,然後分發給底層不同的worker來處理
kafka:一個topic,一個partition,一個consumer,內部單線程消費,寫N個內存queue,然後N個線程分別消費一個內存queue即可