簡訊微信等訊息傳送系統的架構設計
阿新 • • 發佈:2018-12-19
訊息傳送系統 專案中的一種做法,簡化總結如下
1.對外暴露介面1,供業務方呼叫 2.介面2的實現就是同步傳送各種訊息,比如發簡訊,發微信等,但不保證 3.對外暴露介面2,供業務方呼叫 4.介面2內部實現,也是傳送訊息,但是是通過mq解耦的 4.1.業務方呼叫介面2後,介面2的實現將會發送一個topic; 4.2.傳送簡訊系統,消費這個topic,傳送簡訊 4.3.傳送微信的系統,消費這個topic,傳送微信的系統 4.4.等等其他系統,都消費這個topic,可擴充套件
問題1:傳送訊息,要防重,一條訊息不能重複發兩次,因為介面1和介面2都是發簡訊,很可能業務方會同時呼叫 在2.2的地方,加入redis防重,每條訊息都給一個唯一id,傳送前就在redis記錄一下狀態,正在傳送,傳送完成後改狀態為傳送成功 每次傳送前都會判斷redis中是否有這個記錄,有就不發了,沒有就加鎖記錄後再發送,傳送成功後解鎖
問題2:訊息很多的時候,mq重試會造成更多的擠壓,所以這個mq將會關閉重試機制,那麼萬一傳送失敗又沒有重試,要怎麼辦呢? 引入延遲mq,在傳送業務mq的同時,再發一條延遲mq,在業務完成後的一定時間內再回去檢查,保證這條訊息不會丟失