2019-07-10-消息隊列

源產(chǎn)品:?

祖宗 :JMS

JMS角色: produce、cosume

消息模型:

- 點對點的隊列(p2p) ——消費者主動獲取隊列的消息 ,一個消息只有一個消費者可以消費

- 訂閱發(fā)布的主題(sub/pub)——主題會廣播消息給所有已訂閱的消費者,一個消息可以被多個消費者消費

基于JMS發(fā)展來的主流如Kafka、RabbitMQ、RokectMQ等

新產(chǎn)品:

JMS類似與JDBC,sun提供接口,由各個廠商(provider)來進行具體的實現(xiàn)。市面上眾多成熟的JMS規(guī)范實現(xiàn)的框架Kafk,RabbitMQ,ActiveMQ,ZeroMQ,RocketMQ等。

- Kafka

概念圖:

##? 消費模式:至多、至少、剛好1次?

至少1次時考慮冪等性



- RabbitMQ

概念:

????- 路由器exchange(direct、fanout、topic、headers)?

? ? - 隊列queue

? ? - 信道channel

????-生產(chǎn)者produce、消費者consumer

? ? - key: routingkey、bindingkey

? ? - 消息入queue保障方式:2種 ,事務(wù)機制 或 生產(chǎn)者(producer) confirm 模式

流程:????


producer ——routingKey1——>exchange(Type)——bindingKey1——>? ? ?queue1

????????????????????????????????????????????????????????????????????????????????????bindingKey2——>? ? ?queue2

?????????????????????????????????????????????????????????????????????????????????????bindingKey3——>? ? ?queue3

不同類型的exchange:

exchange與queue綁定時會設(shè)置bindingKey,同樣生產(chǎn)者給exchange發(fā)消息時也會設(shè)置routingKey。

如果Type 是direct模式,只有routingKey和bindingKey完全匹配上的queue才能得到exchange轉(zhuǎn)發(fā)的消息。

如果Type 是fanout模式 ,此時生產(chǎn)者發(fā)消息時設(shè)置的routingKey就沒有意義了,因為此時exchange會把其接收到的所有消息廣播給與其綁定著的queue們,不管這些其與這些queue的bindingKey到底是啥。

如果Type 是Topic模式 ,一旦routingKey和bindingKey模糊匹配上的queue就能得到exchange轉(zhuǎn)發(fā)的消息(類似與like方式進行分類發(fā)消息)。

- RokectMQ



參考:

https://blog.csdn.net/canot/article/details/53572400

https://blog.csdn.net/HEYUTAO007/article/details/50131089

補充:

rokect mq 可實現(xiàn) 事務(wù)消息:實現(xiàn)類似 X/Open XA 的分布事務(wù)功能,以達到事務(wù)最終一致性狀態(tài)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容