JMS学习六(ActiveMQ消息传送模型)
JMS學習六(ActiveMQ消息傳送模型)
ActiveMQ 支持兩種截然不同的消息傳送模型:PTP(即點對點模型)和Pub/Sub(即發布 /訂閱模型),分別稱作:PTP Domain 和Pub/Sub Domain。
一、PTP消息傳送模型
?
1、PTP(使用Queue 即隊列目標) 消息從一個生產者傳送至一個消費者。在此傳送模型中,目標是一個隊列。消息首先被傳送至隊列目標,然后根據隊列傳送策略,從該隊列將消息傳送至向此隊列進行注冊的某一個消費者,一次只傳送一條消息。可以向隊列目標發送消息的生產者的數量沒有限制,但每條消息只能發送至、并由一個消費者成功使用。如果沒有已經向隊列目標注冊的消費者,隊列將保留它收到的消息,并在某個消費者向該隊列進行注冊時將消息傳送給該消費者。
?
2、PTP消息傳送模型特性:
(1)、如果在session關閉時,有一些消息已經被收到但還沒有簽收那么當消費者下次連接到相同的隊列時,這些消息還會被再次推送。(消息的被消費是分三個階段的,不滿足任何一個都會被視為未消費)
(2)、在上篇文章中我們學習了消息過濾器,如果消息不滿足消費條件則這些消息是不會被消費的,這些消息會留在隊列中。
(3)、隊列可以長久的保存消息直到有消費者來消費消息,消費者不需要關心消息生產者的連接狀態,這充分體現了異步傳輸的優勢!
?
二、Pub/Sub消息傳送模型(發送/訂閱模型)----不支持負載均衡
?
1、Pub/Sub(使用 Topic即主題目標) 消息從一個生產者傳送至任意數量的消費者。在此傳送模型中,目標是一個主題。消息首先被傳送至主題目標,然后傳送至所有已訂閱此主題的活動消費者。可以向主題目標發送消息的生產者的數量沒有限制,并且每個消息可以發送至任意數量的訂閱消費者。主題目標也支持持久訂閱的概念。持久訂閱表示消費者已向主題目標進行注冊,但在消息傳送時此消費者可以處于非活動狀態。當此消費者再次處于活動狀態時,它將接收此信息。如果沒有已經向主題目標注冊的消費者,主題不保留其接收到的消息,除非有非活動消費者注冊了持久訂閱。
2、Pub/Sub消息傳送模型特性:
(1)、消息的訂閱分為非持久訂閱和持久訂閱,非持久訂閱,只有當客戶端(消息消費者)處于激活狀態時也就是消息消費者和消息服務保持連接狀態時才能收到發送到某個Topic(主題)的消息,而當消息消費者處于離線狀態時發到主題的消息將會丟失,永遠不會收到。持久訂閱能接收到消息消費者和消息服務端斷開期間發送到某個Topic(主題)
的消息即消息消費者在次連接到消息服務時能收到這期間發送的消息。
(2)、和PTP模式一樣,在消費消息時有選擇器,不滿足條件的消息時不會被消費,不消費的消息還是留在了Topic(主題)中。
(3)、非持久訂閱狀態下,不能恢復或重新派送一個未簽收的消息,只有持久訂閱才能恢復或重新派送一個未消費的消息。
(4)、在應用中不能容忍有消息丟失則使用持久訂閱,而如果能容忍消息丟失則使用費持久訂閱,持久訂閱和非持久訂閱兩個的性能還是有很大的卻別的,因為要持久訂閱的話第一個要求就是消息要持久化,而非持久訂閱則不用進行消息的持久化所以效率較高,所以在應用中使用哪種訂閱方式還是要慎重,三思!!!
?
三、實例
在這里就不貼代碼了因為在第二篇文章中已經寫了兩種傳送模式的demo如果需要可以看看:PTP、Pub/Sub 傳送模型文章
總結
以上是生活随笔為你收集整理的JMS学习六(ActiveMQ消息传送模型)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HiveQL中如何排查数据倾斜问题
- 下一篇: 1040 Longest Symmetr