ActiveMQ是一個非常流行的消息隊列服務中間件,基於JMS(Java Message Service)規範,並且它是一個純Java程序,運行環境只需要Java虛擬機。
JMS規範定義了2類消息發送接收模型:點對點queue,發佈訂閱topic,區別是能夠重複消費和是否保存。
1,點對點queue:不可重複消費,消息被消費前一直保存。
生產者發送消息到queue,一個消費者取出並消費消息。
消息被消費後,queue中不再保存,所有隻有一個消費者能夠取到消息。
queue支持多個消費者存在,但是一個消息只有一個消費者可以消費。
當前沒有消費者時,消息一直保存,直到被消費者消費。
2,發佈訂閱topic:可重複消費,發佈給所有訂閱者。
生產者發佈消息到topic中,多個訂閱者收到並消費消息。
和queue不同,發佈到topic中的消息會被所有訂閱者消費。
當生產者發佈消息時,不管是否有訂閱者,都不保存消息。
JMS規範定義的2類消息傳輸模型queue和topic比較:
Queue | Topic | |
模型 | 點對點Point-to-Point | 發佈訂閱publish/subscribe |
有無狀態 | queue消息在消費前被一直保存在mq服務器上的文件或者配置DB | topic數據默認不保存,是無狀態的。 |
完整性保障 | queue保證每條消息都被消費者接收到 | topic不保證生產者發佈的每條消息都被訂閱者接收到 |
消息是否會丟失 | 生產者發送消息到queue,消費者接收到消息。如果沒有消費者,將一直保存,不會丟失。 | 生產者發佈消息到topic時,當前的訂閱者都能夠接收到消息。如果當前沒有訂閱者,該消息就丟失。 |
消息發佈接收策略 | 一對一的消息發佈接收策略,一個生產者發送的消息只被一個消費者接收。mq服務器收到回覆後,將這個消息刪除。 | 一對多的消息發佈接收策略,同一個topic的多個訂閱者都能收到生產者發佈的消息。 |