深入理解ActiveMQ支持的2類消息發送接收模型queue和topic

ActiveMQ是一個非常流行的消息隊列服務中間件,基於JMS(Java Message Service)規範,並且它是一個純Java程序,運行環境只需要Java虛擬機。


JMS規範定義了2類消息發送接收模型:點對點queue,發佈訂閱topic,區別是能夠重複消費和是否保存。


1,點對點queue:不可重複消費,消息被消費前一直保存。

生產者發送消息到queue,一個消費者取出並消費消息。

消息被消費後,queue中不再保存,所有隻有一個消費者能夠取到消息。

queue支持多個消費者存在,但是一個消息只有一個消費者可以消費。

當前沒有消費者時,消息一直保存,直到被消費者消費。

image.png

2,發佈訂閱topic:可重複消費,發佈給所有訂閱者。

生產者發佈消息到topic中,多個訂閱者收到並消費消息。

queue不同,發佈到topic中的消息會被所有訂閱者消費。

當生產者發佈消息時,不管是否有訂閱者,都不保存消息。

image.png

JMS規範定義的2類消息傳輸模型queue和topic比較:


Queue

Topic

模型

點對點Point-to-Point

發佈訂閱publish/subscribe

有無狀態

queue消息在消費前被一直保存在mq服務器上文件或者配置DB

topic數據默認不保存,是無狀態的。

完整性保障

queue保證每條消息都被消費者接收到

topic不保證生產者發佈的每條消息都被訂閱者接收到

消息是否會丟失

生產者發送消息到queue,消費者接收到消息。如果沒有消費者,將一直保存,不會丟失。

生產者發佈消息到topic時,當前的訂閱者都能夠接收到消息。如果當前沒有訂閱者,該消息就丟失。

消息發佈接收策略

一對一的消息發佈接收策略,一個生產者發送的消息只被一個消費者接收。mq服務器收到回覆後,將這個消息刪除。

一對多的消息發佈接收策略,同一個topic的多個訂閱者都能收到生產者發佈的消息。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章