簡訊系統實現原理(基於redis)
1:把需要傳送的資訊封裝成json
1.0:簡訊通道(驗證碼,短訊息,。。。)
1.0.0:把需要傳送的json放入redis對應的池子中(有個模板templet)
1.1:定時傳送
1.2:延遲傳送
2:簡訊系統開啟多執行緒,實時從redis中獲取key,發簡訊
2.0:獲取json中的模板(templet)
2.1:獲取配置檔案中的警告數量和警告時間
2.1.0:等於警告數量:簡訊以及郵件通知運維人員,【預警】【該簡訊時間週期內達到指定條數】
2.1.1:大於警告數量:延遲傳送簡訊(模板級控制)
2.1.2:小於警告數量:指定時長內沒有超過則清零,達到預警值後就不清零了,需要手動解除預警
2.1.3:
2.2:解析json傳送簡訊:
2.2.0:如果message為空,如果是簡訊驗證碼:生產6為隨機數存入redis,如果message不為空則不經過模板,直接傳送
2.2.1:過濾傳送簡訊的手機號:每天傳送次數是有限制的,如果達到限制則不會再發送,過濾出為達到上限的手機號字串(這時候會查詢資料庫,查詢出當天當前手機號傳送記錄數),兩個手機號之間用逗號分隔
2.2.2:遞迴呼叫傳送簡訊:簡訊服務提供商為空,否則,切換簡訊提供商,負載均衡,用預設的提供商,否則用傳來的簡訊提供商。如果沒有獲取到簡訊傳送提供商則報異常
2.2.3:判斷可使用的簡訊條數不夠,則切換備用通道來發送簡訊,否則先減去要傳送的簡訊數量,再發送簡訊;如果傳送失敗,先切換通道,如果切換通道還失敗,則簡訊條數加回去,在切換提供商;如果備用通道傳送成功,則將當前通道改為備用通道儲存到資料庫
2.3.4:實現發簡訊的公司有N個,分別實現他們提供的介面來發簡訊
3:如果簡訊傳送成功,則把記錄插入資料庫中
--後續補充程式碼
by GeekPlusA
data:201805302202