源產(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)。