2015-10-20 46 views
2

我有三個TomEE實例正在運行。我想用一個作爲'主'經紀人,並有兩個其他實例作爲客戶端連接到主。我希望客戶能夠相互發送/接收消息。如何配置TomEE嵌入式ActiveMQ代理的靜態網絡以便客戶端可以進行通信?

最大的要求是我必須使用靜態網絡;只需將客戶端tomee.xml中的ServerUrl指向主網址即可。

我已驗證我能夠靜態連接兩個容器並傳遞消息,但是當我介紹第三個容器(主人)時,消息停止從'客戶端A'流向'客戶端-B'

主tomee.xml

<Resource 
    id="ra/activemq" 
    type="ActiveMQResourceAdapter"> 
    BrokerXmlConfig = broker:(tcp://127.0.0.1:61616,network:static:(tcp://127.0.0.1:61615,tcp://127.0.0.1:61617))/tomeeActiveMq?useJmx=true 
    ServerUrl = tcp://127.0.0.1:61616 
</Resource> 

客戶-A tomee.xml

<Resource 
    id="ra/activemq" 
    type="ActiveMQResourceAdapter"> 
    BrokerXmlConfig = broker:(tcp://127.0.0.1:61615,network:static:tcp://127.0.0.1:61616)/server0?useJmx=true&amp;persistent=false 
    ServerUrl = tcp://127.0.0.1:61615 
</Resource> 

客戶-B tomee.xml

<Resource 
    id="ra/activemq" 
    type="ActiveMQResourceAdapter"> 
    BrokerXmlConfig = broker:(tcp://127.0.0.1:61617,network:static:tcp://127.0.0.1:61616)/server1?persistent=false&amp;useJmx=true 
    ServerUrl = tcp://127.0.0.1:61617 
</Resource> 

我的ActiveMQ控制檯顯示兩個客戶端都確實經由靜態網絡連接到主:

enter image description here

這裏是代理的圖根據HawtIO的佈局:

Diagram of broker layout from HawtIO

提前致謝。

回答

1

對於3+代理網絡,您需要將networkTTL選項設置爲大於1的默認值。 TTL選項設置消息可以到達的網絡代理的最大限制。

因此,默認情況下,您可以在同一網絡中與主設備和主設備通信,而不是在主設備上通信,但不會在通信設備上通信c2 < - > c2。

不知道如何通過資源適配器中的URI傳遞該選項。

More about the network of brokers configuration

+0

是否'networkTTL'屬性需要在所有的三個設置,或者只是在主?我爲master配置了一個'activemq.xml',並且包含'uri =「static:(tcp://127.0.0.1:61615,tcp://127.0.0.1:61617)」networkTTL =「4」'在'networkConnector'節點上。仍然沒有c2通信。 –

+0

我實際上可以在master的activemq.xml的networkConnector節點上使用'networkTTL'並設置'duplex =「true」'來實現這一點。我還必須在客戶端的tomee.xml資源配置中刪除靜態網絡,否則會出現有關名稱正在使用(來自雙工屬性)的奇怪錯誤。感謝您的協助! –

+0

不錯。由於您可以控制單個代理的網絡連接,所以雙工選項非常棒。 –

相關問題