2011-04-14 143 views
1

我們有兩個activemq實例配置爲一個集羣和一個四個glassfish實例的集羣,在任何給定時間都應該連接到一個activemq。如果activemq01不可用,則所有四個glassfish實例都應在activemq02上進行故障轉移。activeMQ多個消費者問題

我注意到了幾次,出於不明原因,其中一個(隨機)glassfish實例將在activemq02上進行故障轉移,其餘三個實例仍將連接到activemq01,即使activemq01未關閉,並且所有glassfish實例應該一直在收聽activemq01。

日誌沒有指出任何可以解釋這種行爲的東西,只有那一個glassfish實例無法連接到activemq01和activemq02上的故障轉移才能看到。

有沒有人遇到過相同或類似的問題?任何幫助/意見,不勝感激。

這裏是我的ActiveMQ CONFIGS:

activemq01:

http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-豆類,2.0.XSD http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd「>

文件:$ {} activemq.base /conf/credentials.properties

<managementContext> 
    <managementContext connectorPort="1093" createConnector="true"/> 
</managementContext> 

<networkConnectors> 
    <networkConnector name="amq-prod" uri="static://(tcp://127.0.0.1:61616,tcp://192.168.0.167:61616)" /> 
</networkConnectors> 


<persistenceAdapter> 
    <kahaDB directory="${activemq.base}/data/kahadb"/> 
</persistenceAdapter> 

<plugins> 
    <loggingBrokerPlugin logAll="false" logConnectionEvents="true"/> 
</plugins> 


<systemUsage> 
    <systemUsage> 
    <memoryUsage> 
     <memoryUsage limit="2048 mb"/> 
    </memoryUsage> 
    <storeUsage> 
     <storeUsage limit="2 gb" name="prod"/> 
    </storeUsage> 
    <tempUsage> 
     <tempUsage limit="2000 mb"/> 
    </tempUsage> 
    </systemUsage> 
</systemUsage> 

<transportConnectors> 
    <transportConnector name="openwire" uri="tcp://0.0.0.0:61616" updateClusterClients="true" /> 
</transportConnectors> 

activeMQ02:

http://www.springframework.org/schema/beans http://www.springframework.org/ schema/beans/spring-beans-2.0.xsd http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd「>

文件:$ {} activemq.base /conf/credentials.properties

<managementContext> 
    <managementContext connectorPort="1093" createConnector="true"/> 
</managementContext> 

<networkConnectors> 
    <networkConnector name="amq-prod" uri="static://(tcp://127.0.0.1:61616,tcp://192.168.0.166:61616)" /> 
</networkConnectors> 


<persistenceAdapter> 
    <kahaDB directory="${activemq.base}/data/kahadb"/> 
</persistenceAdapter> 

<systemUsage> 
    <systemUsage> 
    <memoryUsage> 
     <memoryUsage limit="2048 mb"/> 
    </memoryUsage> 
    <storeUsage> 
     <storeUsage limit="2 gb" name="prod"/> 
    </storeUsage> 
    <tempUsage> 
     <tempUsage limit="2000 mb"/> 
    </tempUsage> 
    </systemUsage> 
</systemUsage> 

<transportConnectors> 
    <transportConnector name="openwire" uri="tcp://0.0.0.0:61616" updateClusterClients="true" /> 
</transportConnectors> 

activeMQ版本 - 5.4。1

回答

1

有你networkConnector標籤定義如下:

acticemq01配置:

<networkConnector 
     name="amq1-nc" 
     uri="static:(failover:(tcp://192.168.0.167:61616))" 
     networkTTL="2" 
     duplex="true" 
     dynamicOnly="true" 
    /> 

acticemq02配置:

<networkConnector 
     name="amq2-nc" 
     uri="static:(failover:(tcp://192.168.0.166:61616))" 
     networkTTL="2" 
     duplex="true" 
     dynamicOnly="true" 
    /> 

而在你的消費者使用JMS提供者URL是這樣的:

failover:(tcp://192.168.0.166:61616,tcp://192.168.0.167:61616)?randomize=false&timeout=5000 

以上failover URL將始終連接到acticemq01經紀人(如果可用)。如果acticemq01發生故障,它會自動故障切換到acticemq02代理。同樣,timeout = 5000將確保消費者在5秒內拋出錯誤,試圖連接到任何2個經紀人。

+0

謝謝Anubhava!這個配置的問題是,當我停止activemq01時,activemq02上的連接失敗,但是當我嘗試啓動activemq01並停止activemq02時,消費者沒有故障恢復到activemq01。 – Nerses 2011-04-15 16:59:06

+0

我的待處理隊列一直在堆疊,我花了很多時間研究和調整設置,並不確定發生了什麼。這隻發生在一個隊列中。只是爲了給你一些內部的信息,以防你可以建議通過一些配置改變來提高性能: – Nerses 2011-04-15 17:01:29

+0

生產者將消息對象放入隊列中,隊列中有幾十個單獨的聯繫人,然後消費者(4)監聽隊列,並選擇消息(對象),解析並提交給移除供應商,當時是一個聯繫人。據瞭解,供應商交付的性能很慢,您認爲如果我增加該隊列的預取大小(當前是100),它會糾正問題,並且消息不會堆棧在待處理隊列中?預先感謝您 – Nerses 2011-04-15 17:04:50