1,mq中訊息投遞分為兩種,一種是生產者往mq broker種投遞,另一種是broker往消費者投遞
乙個訊息主題對應了多個訊息佇列,所以會產生兩個問題,生成者應該把訊息放入到哪個佇列種,消費者應該從哪個訊息佇列中拉取訊息。因為訊息在系統之間傳遞的時候,跨越網路,訊息的傳播無法保證其有序
2,生產者投遞訊息的策略
2.1:基於queue佇列輪詢演算法,發布的資訊有乙個index,根據index對佇列總數目取餘。因為這個index是遞增的
2.2:基於queue佇列輪詢演算法和訊息投遞延遲最小時間,mq會統計訊息投遞的時間延遲,後面優先使用投遞延遲時間最小的策略,當時間相同的時候,再使用佇列輪詢
2.3: 當我們需要保證訊息投遞有序的時候,需要進行一些策略來限制,不然消費者消費的順序發生錯誤的時候是不被允許的。解決辦法:針對相同的訂單號,通過一致性hash策略,將其放在同乙個佇列中;然後消費者再採用一定的策略(用乙個執行緒處理乙個queue來保證訊息處理的順序性)
通過訊息佇列選擇器這個介面來實現的,有以下三個類來實現這個介面
3,如何為消費者分配queue佇列
rocketmq對於消費者消費有兩種形式,廣播:乙個訊息會被每個消費者消費;集群:乙個訊息最多被乙個消費者消費。
廣播模式的話,消費者每次從每個佇列中依次消費訊息,
集群模式:底層是通過指定queue佇列給消費者的方式來完成的。分配的單位是queue佇列。rocket mq提供了乙個介面allocatemessagequeuestrategy,具體的實現類有下面這些。
1,平均分配演算法:取餘依次按照餘數進行分配,不是完全平均的
2,基於環形平均演算法:將消費者依次分配到佇列的環形組成中
3,基於機房臨近原則
4,基於機房分配演算法
5,基於一致性hash演算法
6,基於配置分配演算法
預設情況下採用平均分配演算法
4,rocketmq新增監控和系統告警通知
解決辦法:修改rocketmq-console原始碼,主要是利用rocketmq的mqadmin工具
訊息傳遞機制
objc msgsend函式 在oc語言裡面,訊息在執行時會繫結為 c語言 方法。編譯器會轉化乙個訊息表示式 receiver selector 任何在訊息中傳遞的引數也會被objc msgsend函式處理 objc msgsend receiver,selector,arg1,arg2,訊息傳遞函...
MFC的訊息傳遞機制
今天又研究了一下mfc的訊息傳遞機制,發現mfc的訊息傳遞也沒那麼複雜。簡單的就是那麼幾個要點 1 用巨集定義了乙個訊息表,每個類一張表,父類子類通過指標連線,構成乙個訊息網。表裡面每項就定義了訊息號 id號和函式執行入口及函式引數形式。得到乙個訊息,就和表裡面的項比較,訊息一樣的就執行對應的函式。...
Handler訊息傳遞機制
使用方法 1.若在ui主線程中,則系統已經初始化了乙個looper物件 因為主線程也是乙個訊息迴圈,因此具有乙個looper,主線程的所有工作都是由其looper完成的looper不斷從訊息佇列中抓取訊息,然後完成訊息指定的任務 否則要自己建立乙個looper物件並啟動。我們無法通過構造器建立loo...