簡體   English   中英

如何使activemq實際上可靠? 當經紀人斷開連接消息丟失時

[英]How does one make activemq actually reliable? When brokers disconnect messages are lost

我們有一個在Apache TomEE v1.6.0 +中內置的JEE6應用程序。 有兩部分,雲部分和地面部分。 計划永遠不要重新啟動雲部分,因為它監視瞬時信息源,但是會創建JMS消息並將其發送到其代理。

地面部分打算白天可重啟,並且是復雜處理邏輯所在的地方。 它也具有連接到雲代理的代理。

我們遇到的問題是,如果我們關閉TomEE的地面實例超過幾分鍾,然后再次啟動它,雲代理將不會傳遞所有堆積的消息。 此外,它也不會傳遞任何新消息,迫使我們重新啟動它,這使我們丟失了消息。

這是兩個連接URI ...到底我們在做什么錯?

雲:

<Resource
    id="ActiveMQResourceAdapter"
    type="ActiveMQResourceAdapter">
    BrokerXmlConfig = broker:(ssl://0.0.0.0:61617?needClientAuth=true&amp;transport.keepAlive=true&amp;transport.soTimeout=30000,vm://localhost,network:static:(failover:(ssl://ground.somedomain.com:61617?keepAlive=true&amp;soTimeout=30000)))?persistent=true
    ServerUrl = vm://localhost
    DataSource = jdbc/activemq
</Resource>

地面:

<Resource
    id="ActiveMQResourceAdapter"
    type="ActiveMQResourceAdapter">
    BrokerXmlConfig = broker:(ssl://0.0.0.0:61617?needClientAuth=true&amp;transport.keepAlive=true&amp;transport.soTimeout=30000,vm://localhost,network:static:(failover:(ssl://cloud.somedomain.com:61617?keepAlive=true&amp;soTimeout=30000)))?persistent=true
    ServerUrl = vm://localhost
    DataSource = jdbc/activemq
</Resource>

任何幫助深表感謝。 非常感謝你!!

好的,我們學到了兩件事。

首先,我們切換到使用ActiveMQ的外部實例,而不是依賴於TomEE內部的嵌入式實例。 必須先啟動代理,然后再啟動TomEE,否則TomEE將在啟動時創建內部代理,而您將不知所措,為什么不處理任何消息。 然后,通過設置BrokerXmlConfig =ServerUrl = tcp://localhost將TomEE連接到代理。

接下來,我們切換到使用activemq http傳輸。 由於http是無狀態的,因此這完全可以消除任何網絡斷開問題。 但是,相對於tcp / ssl來說,這是非常慢的,但是消息傳輸不是我們系統中最慢的一點,因此無論如何都沒有關系。 您必須讓外部代理同時監聽http和tcp,因為TomEE通過TCP連接,而遠程代理通過http連接。

這兩件事解決了我們的問題,現在我們有了一個完全可靠的系統。 我希望這可以幫助別人!!

不知道您使用的是主題還是隊列,但是JMS規范說只有隊列和持久訂閱者才能利用存儲轉發保證的交付。

對於非持久性訂戶,非持久性消息將“​​最多一次”傳遞,但如果處於非活動狀態,則將丟失。

請查看以下URL,該URL詳細說明了ActiveMQ中主題和隊列的保證消息傳遞是如何工作的:

http://www.christianposta.com/blog/?p=265

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM