回覆列表
-
1 # 桃心依舊en
-
2 # 特修斯的宇宙
我想你的問題是想問“如何自己設計”一套訊息佇列框架,對嗎?
現實中已經有了很多面向不同系統的訊息佇列軟體,成熟的訊息佇列如kafka,rocketmq等。其實現語言也是多種多樣,你可以從Github之類的地方獲得這些軟體來學習和使用。
訊息佇列主要是為了系統解耦,先說說設計上需要考慮哪些。
1、一個比較完整的訊息佇列需要考慮以下功能(不完全列表)
訊息收發機制、訊息堆積處理、、訊息持久化、訊息可靠投遞(至少保證一次投遞,以及重複投遞的處理)、Topic支援(唯一或多Topic)、多消費者投遞(同一Topic訊息)、投遞迴溯、叢集和負載均衡等效能設計、事務支援、監控和告警等維護功能
大概有這些吧。
以上是設計需要考慮的東東。
再簡單說說實現要考慮什麼。
2、實現的話,主要從 協議、轉儲、消費 簡單說說。
協議:這個展開了很多內容。簡單說就是現在通行的是用RPC框架實現通訊。利用PRC框架解決負載均衡,服務發現,協議化,序列化等問題。RPC框架你可以百度瞭解一下。
訊息首先Topic序列化並組織到儲存管道中,管道維護一個鎖,獲得鎖的消費者查詢並獲得自己的訊息項。
儲存:儲存管道一般會建立在 記憶體、檔案系統(本地或分散式)、資料庫(關係、非關係皆可)。這幾種方式根據具體情況選用。比如:需要速度,不需要深度則考慮記憶體,需要可靠就選資料庫,等等。
消費關係:訊息投遞到消費者一般採用廣播或單播, 最常見的使用場景是組內單播,組間廣播,對如一個叢集內可以使用相同的群組來註冊訂閱。通常還需要輔助系統幫助維護消費訂閱關係,在消費關係發生變化時發出通知。
另外需要特別考慮的東西還有:訊息的可靠到達,確認與重發,序列號對齊等等。這些幾句話說不清楚,有時間你可以在回覆中提問,我具體回覆。
看你使用什麼程式語言,參考一下
訊息佇列技術是分散式應用間交換資訊的一種技術。訊息佇列可駐留在記憶體或磁碟上,佇列儲存訊息直到它們被應用程式讀走。透過訊息佇列,應用程式可獨立地執行--它們不需要知道彼此的位置、或在繼續執行前不需要等待接收程式接收此訊息。
1. 執行緒使用場景
(1)流水線方式。根據業務特點,將一個流程的處理分割成多個執行緒,形成流水線的處理方式。產生的結果:延長單一流程的處理時間,提高系統整體的吞吐能力。
(2)執行緒池方式。針對處理時間比較長且沒有內蘊狀態的執行緒,使用執行緒池方式分流訊息,加快對執行緒訊息的處理,避免其成為系統瓶頸。
執行緒使用的關鍵是執行緒訊息佇列、執行緒鎖、智慧指標的使用。其中以執行緒訊息佇列最為重要。
簡單的執行緒訊息佇列實現 - 闖爺88 - 部落格園
https://www.cnblogs.com/lijingcheng/p/4454876.html