保證主題,JMS規范和ActiveMQ的消息傳遞

最近,一個客戶要求我仔細研究ActiveMQ的“持久”消息的實現,它如何應用于主題以及在存在非持久訂閱者的故障轉移方案中會發生什么。

我已經了解到,JMS語義規定,即使面對消息代理提供者失敗,也只能保證主題的持久訂戶以持久傳遞模式傳遞消息。 但是對于持久消息的非持久訂戶,該怎么說呢? 沒有持久訂閱者時發送“持久”消息有什么意義?

在查看規范的確切措辭后,我有點不確定。 因此,我查閱了Java消息服務書(Richards,Monson-Haefel和Chappell),以獲取有關保證消息傳遞的更多討論,并查閱ActiveMQ源代碼,并與我的一些同事進行了咨詢。

首先,讓我們看一下規格說明:

根據JMS規范的第4.10節:

大多數客戶應使用產生PERSISTENT消息的生產者。 這樣可以確保從隊列或持久訂閱中傳遞的消息僅一次傳遞一次。

很清楚吧? 使用持久消息傳遞可確保隊列或持久預訂的消息傳遞。

從第6.12節開始:

不可持久訂戶的未確認消息應該能夠在該不可持久訂戶的生命周期中恢復。

因此,現在應該能夠恢復非持久訂戶的未經確認的消息嗎? 我猜是“在那個非持久訂戶的一生中”

但后來成為6.12的一部分:

只有持久訂閱才能可靠地恢復未確認的消息。

和…

為了確保傳遞,TopicSubscriber應該建立持久訂閱。

盡管規范非常清楚地表明(只有效果),只有隊列和持久訂戶才能利用存儲轉發保證的交付,但是我猜我對“非持久訂戶應該能夠在非持久性訂戶的生命周期內恢復”

  • 是否根據主題的使用者更改主題的持久性協議(只有在經紀人保留消息并向生產者發送確認后,消息才被視為經紀人的責任)?
  • 即使經紀人倒閉,這也意味著嗎? 還是考慮了經紀人的失敗以及非耐久潛艇的訂購期限?
  • 當存在用于持久性,非持久性主題的代理網絡時,ActiveMQ會發生什么? 如果網絡中的代理失敗,消息會丟失嗎?
  • 向具有非持久訂閱者的主題發送消息“持久”與“非持久”之間的確切區別是什么?

這是保證交付討論中必須考慮的兩個部分。 發布者向代理發送消息的位置,以及消費者從代理接收消息的時間。 對于持久性消息,該協議僅在將消息持久化到存儲后才允許發送方發送消息,并且代理使消息能夠確認。 另一方面,消費者必須在經紀人傳遞消息后確認該消息,說“嘿,我現在將對此消息負責”。 只有這樣,經紀人才會放棄責任并將其從其商店中刪除。 ?

協議是否根據主題的使用者而改變?

因此,對于發送到某個主題的持久消息(目前未考慮任何消費者),規范是否說明在代理發回其確認之前是否應該存儲該消息? 不,不是。 它由有關的JMS代理的實現者來決定。 對于ActiveMQ,如果某個主題上只有非持久訂閱,它將不會保留該消息。

協議的同步性質不會改變,即,如果消息是持久發送的,則會話將認為與代理的交換是同步的,并且它將在繼續之前等待代理的響應,但代理不會實際保留消息。 在ActiveMQ中,如果至少有一個持久訂戶,則此情況會更改。 然后,代理將按照JMS規范保留消息。 ?

這是否意味著即使發生經紀人失敗?

如果代理失敗,則非持久訂閱的生存期確實會中斷。 因此,在代理失敗(或該非持久子項的任何其他終止)的情況下,即使將消息持久發送,也不會將其傳遞給該非持久訂戶。 此外,面對代理的非持久訂閱失敗,將不會重新發送消息。 ?

在經紀人網絡中會發生什么?

消息確實可能丟失。 考慮這個經紀人網絡,其中A-> B-> C和訂閱是從C-> B-> A轉發的。因此,如果我們在A處有一個生產者,生產的主題為“ topic.foo”,而一個非耐用的消費者如果代理B在代理C上從“ topic.foo”消耗,則如果代理B發生故障,此后發送到A的消息將被丟棄。 據A所知,訂閱的生存期已終止。

最后, ?

向具有非持久訂閱者的主題發送消息“持久”與“非持久”之間的確切區別是什么?

根據JMS規范:

出版方式 非持久訂戶 耐用的訂戶
非持久 最多一次(如果不活動則丟失) 最多一次
持久性 一次僅一次(如果不活動則丟失) 一次一次

因此,對于非持久性訂戶,非持久性消息將“??最多”傳遞一次,但如果處于非活動狀態(或代理失敗)則將丟失。

對于非持久性訂戶,持久消息將“一次且僅發送一次”,但如果不活動則丟失。 規范的“非活動”部分實際上意味著,如果沒有持久的主題訂閱者,則消息可能會丟失,并且無論消息是持久發送還是非持久發送,都無法保證傳遞。

參考: Christian Posta軟件博客上來自JCG合作伙伴 Christian Posta的主題,JMS規范和ActiveMQ的有保證的消息傳遞 。


翻譯自: https://www.javacodegeeks.com/2012/08/guaranteed-messaging-for-topics-jms.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/371460.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/371460.shtml
英文地址,請注明出處:http://en.pswp.cn/news/371460.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java中的除法及求余運算特殊性。

1.如果除法運算符的兩個操作數都是整數類型,則計算結果也是整數,就是將自然除法的結果截斷取整,例如19/4的結果是4,而不是5。并且除數不能0,否則將引起除0異常 2.如果運算符的兩個操作數有1個是浮點數,或兩…

林海峰老師python課件密碼

egon4573轉載于:https://www.cnblogs.com/fengjunhua/p/7395591.html

國際旅游管理專業跨專業考計算機,旅游管理考研我想跨專業考旅游管理專業的研究 – 手機愛問...

2005-12-11我是學旅游管理的大一學生,聽人說這專業就這位兄弟提出的苦惱在大學生中很典型呀!其實你說的不盡然!旅游管理專業,是個很有前景的專業呀!怎么會沒有前途呀?你對自己的人生也太悲觀了吧?就是你說,學校不太好,這可能對自身在大學四年的發展有所限制,但這主要還是看自…

Java注釋:探究和解釋

Java 5 SE的許多出色功能之一是Annotations構造的引入。 注釋是一些標簽,我們可以將其插入程序源代碼中,以使用某種工具對其進行處理并使其變得有意義。 注釋處理工具通常使用(Java 5 SE的)Reflection API在Java代碼或字節碼級別的…

C# 類

一 string 類型 變量.Length - 字符串長度,返回int類型 string s "abcdefg"; int a s . Length; Console.WriteLine(a); // 輸出結果為:7(此字符串有7個字符) // Length返回有多少個字符&am…

node+mongodb+win7

一、安裝mongodb,參照教程,注意要先啟動mongod.exe,再啟動mongd.exe。 轉載于:https://www.cnblogs.com/iloveyou-sky/p/7396997.html

cdrom是多媒體微型計算機,全國計算機二級題庫第三章

同時按下CTRLALTDEL組合鍵的作用是(使用任務管理器關閉不響應的應用程序下列說法正確的是(在微型機性能指標中,CPU的主頻越離,其運算速度越快)微型計算機鍵盤上的Tab鍵是(交替換檔鍵)微型計算機鍵盤上的Enter鍵是(回車鍵)微型計算機的運行速度的單位是mi…

Spring MVC控制器JUnit測試

JUnit測試Spring MVC控制器并非易事 。 但是最近,一個新項目 (即將在Spring推出)提供了新工具來簡化此工作。 這篇文章說明了如何通過JUnit測試來測試一個簡單的控制器。 該代碼是JUnit Testing Spring Service和DAO(帶有內存數據…

java基礎03變量和基本數據類型

package cn.bdqn.test;/*** * author 小豆腐* * 變量:會變化的量??* 一個數據在內存中存儲空間的表示!在運行期間可以動態改變!* * 關鍵字:在java中已經被使用或者定義的單詞!不能作為變量名&#xff01…

5.set集合

list_1 [1,2,3,4,5]list_2 [1,3,5,7,9]#列表轉成set集合set_1 set(list_1)set_2 set(list_2)#交集print(set_1.intersection(set_2))print(set_1 & set_2)#判斷沒有交集print(set(["a","b"]).isdisjoint(set_1))#并集print(set_1.union(set_2))pri…

JavaFX中基于表達式的PathTransitions

在JavaFX中,您可以使用PathTransition對象為路徑上的節點設置動畫。 PathTransitions使用Shape對象描述它們需要沿其動畫的路徑。 JavaFX提供了各種類型的形狀(例如,多邊形,圓形,多邊形,路徑)。…

html 顯示視頻列表,dvd光碟制作節目軌菜單布局,不要視頻縮略圖,只顯示文件列表...

“如何在刻錄視頻光盤時自定義制作菜單?實現的效果就是當光盤插入DVD影碟機播放時,首先會出現一個所有視頻文件列表的菜單(節目軌菜單),就相似于音樂CD曲目表一樣,不需要有視頻縮略圖,可通過遙控器選擇性播放列表中某一…

v3學院教你學習-task和function的異同

v3學院教你學習-task和function的異同 task(任務)與function(函數)的不同 任務與函數主要有以下四點不同: l 函數只能與主模塊共用一個仿真時間單位,而任務定義自己的仿真時間單位。 l 函數不能啟動任務&am…

Spring事件的觀察者模式

介紹 觀察者模式的本質是“定義對象之間的一對多依賴關系,以便當一個對象改變狀態時,其所有依賴關系都會得到通知并自動更新。” GoF。 觀察者模式是發布/訂閱模式的子集,它允許許多觀察者對象查看事件。 可以在不同的情況下使用此模式&#…

jQuery選擇什么版本 1.x? 2.x? 3.x?

目前jQuery有三個大版本: 1.x:兼容ie678,使用最為廣泛的,官方只做BUG維護,功能不再新增。因此一般項目來說,使用1.x版本就可以了,最終版本:1.12.4 (2016年5月20日)2.x:不兼容ie678&a…

Delta DVP 系列 PLC 各裝置 Modbus 地址

此Modbus地址表以 1 為基礎地址 Device Range Type DVP address (Hex) Modbus address (Dec) Effective ES/EX/SS SA/SX/SC EH S 000~255 bit 0000~00FF 000001~000256 0~127 0~1024 0~1024 S 256~511 bit 0100~01FF 000247~000512 S 512~767 bit 020…

Reporting Service 2008 “報表服務器數據庫內出錯。此錯誤可能是因連接失敗、超時或數據庫中磁盤空間不足而導致的”...

今天遇到了兩個關于Reporting Service的問題, 出現問題的環境為Microsoft SQL Server 2008 R2 (SP2) - 10.50.4000.0 (X64) 。具體情況請見下面描述。 1:在修改報表的訂閱后,保存時出現下面錯誤: 提示:報表服務器數據庫…

Java 7:HashMap與ConcurrentHashMap

從我過去有關性能的文章和HashMap案例研究中可能已經看到,Java線程安全性問題可以很輕松地使Java EE應用程序和Java EE容器崩潰。 在對Java EE性能問題進行故障排除時,我觀察到的最常見問題之一是由非線程安全的HashMap get()和pu…

計算機網絡按信息傳輸介質的性能來劃分,大學計算機基礎練習題網絡技術.doc...

網絡技術一、單選:1. 在計算機網絡中,表征數據傳輸可靠性的指標是( )。A?誤碼率 B?頻帶利用率C?信道容量 D?傳輸速率參考答案:A2. 和通信網絡相比,計算機網絡最本質的功能是( )。A?數據通信 B?資源共享C?提高計算機的可靠性…

【2017-03-02】集合、結構體、枚舉

集合和數組的差別: 數組:同一類型,固定長度集合:不同類型,不固定長度 一、普通集合(弱類型) 1、ArryList 使用集合首先要引用命名空間。 或者在ArryList上右鍵找“解析”。 2、集合的定義&#…