日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

activemq和jms_保证主题,JMS规范和ActiveMQ的消息传递

發(fā)布時間:2023/12/3 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 activemq和jms_保证主题,JMS规范和ActiveMQ的消息传递 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

activemq和jms

最近,一位客戶要求我仔細研究ActiveMQ的“持久”消息的實現(xiàn),它如何應(yīng)用于主題以及在存在非持久訂戶的故障轉(zhuǎn)移方案中會發(fā)生什么。

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

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

首先,讓我們看一下規(guī)格說明:

根據(jù)JMS規(guī)范的第4.10節(jié):

大多數(shù)客戶應(yīng)使用產(chǎn)生PERSISTENT消息的生產(chǎn)者。 這樣可以確保從隊列或持久訂閱中傳遞的消息只有一次的消息傳遞。

很清楚吧? 使用持久消息傳遞可確保為隊列或持久預(yù)訂傳遞消息。

從第6.12節(jié)開始:

不可持久訂戶的未確認消息應(yīng)該能夠在該不可持久訂戶的生命周期中恢復(fù)。

因此,現(xiàn)在應(yīng)該能夠恢復(fù)非持久訂戶的未經(jīng)確認的消息嗎? 我猜是“在那個非持久訂戶的一生中”

但后來成為6.12的一部分:

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

和…

為了確保傳遞,TopicSubscriber應(yīng)該建立持久訂閱。

盡管規(guī)范非常清楚地表明(只有效果),只有隊列和持久訂戶才能利用存儲轉(zhuǎn)發(fā)保證的交付,但是我猜我對“非持久訂戶應(yīng)該能夠在非耐用訂戶的整個生命周期內(nèi)恢復(fù)”

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

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

協(xié)議是否根據(jù)主題的使用者而改變?

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

協(xié)議的同步性質(zhì)不會改變,即,如果消息是持久發(fā)送的,則會話將認為與代理的交換是同步的,并且它將在繼續(xù)之前等待代理的響應(yīng),但代理不會實際保留消息。 在ActiveMQ中,如果至少有一個持久訂戶,則這種情況會改變。 然后,代理將保留消息(按照JMS規(guī)范)。 ?

這是否意味著即使發(fā)生經(jīng)紀人失敗?

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

在經(jīng)紀人網(wǎng)絡(luò)中會發(fā)生什么?

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

最后, ?

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

根據(jù)JMS規(guī)范:

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

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

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

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


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

activemq和jms

總結(jié)

以上是生活随笔為你收集整理的activemq和jms_保证主题,JMS规范和ActiveMQ的消息传递的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。