activeMQ多个消费者问题

时间:2011-04-14 13:32:13

标签: glassfish activemq

我们有两个activemq实例配置为一个集群,一个集群包含四个glassfish实例,应该在任何给定时间连接到ONE activemq。如果activemq01不可用,则所有四个glassfish实例都应在activemq02上进行故障转移。

我已多次注意到,由于未知原因,其中一个(随机)glassfish实例将在activemq02上进行故障转移,其余三个实例仍将连接到activemq01,即使activemq01未关闭,并且所有glassfish实例都应该一直在听activemq01。

日志没有指出可以解释这种行为的任何内容,我只能看到一个glassfish实例无法连接到activemq01上的activemq01和failedover。

有没有人遇到过相同或类似的问题?非常感谢任何帮助/建议。

这是我的activemq配置:

activemq01:

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.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“&gt;

           文件:$ {} 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 个答案:

答案 0 :(得分:1)

将您的networkConnector标记定义如下:

acticemq01 config:

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

acticemq02 config:

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

在您的消费者中使用 JMS提供商网址,如下所示:

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个经纪人中的任何一个。