Glassfish activeMQ多用户问题

Glassfish activeMQ多用户问题,glassfish,activemq,Glassfish,Activemq,我们有两个配置为集群的activemq实例和一个由四个glassfish实例组成的集群,它们在任何给定时间都应该连接到一个activemq。如果activemq01不可用,则所有四个glassfish实例都应在activemq02上进行故障切换 <systemUsage> <systemUsage> <memoryUsage> <memoryUsage limit="2048 mb"/> </memoryUsa

我们有两个配置为集群的activemq实例和一个由四个glassfish实例组成的集群,它们在任何给定时间都应该连接到一个activemq。如果activemq01不可用,则所有四个glassfish实例都应在activemq02上进行故障切换

<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>
我已经注意到好几次,由于未知的原因,其中一个(随机)glassfish实例将在activemq02上进行故障切换,其余三个实例仍将连接到activemq01,即使activemq01没有关闭,并且所有glassfish实例都应该在activemq01上侦听

<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>
日志并没有指出任何可以解释这种行为的东西,如果一个glassfish实例无法连接到activemq01并在activemq02上进行故障切换,我所能看到的就是这些

<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>
有没有人经历过相同或类似的问题?非常感谢您的帮助/建议

<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配置:

<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>
activemq01:

<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>
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://activemq.apache.org/schema/core/activemq-core.xsd“>

<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.base}/conf/credentials.properties

<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>

<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>

<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:

<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>
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://activemq.apache.org/schema/core/activemq-core.xsd“>

<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.base}/conf/credentials.properties

<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>

<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>

<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>

<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版本的networkConnector标记定义如下:

<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>
failover:(tcp://192.168.0.166:61616,tcp://192.168.0.167:61616)?randomize=false&timeout=5000
激活Q01配置:

<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>
 <networkConnector
         name="amq1-nc" 
         uri="static:(failover:(tcp://192.168.0.167:61616))" 
         networkTTL="2" 
         duplex="true"
         dynamicOnly="true" 
  />
 <networkConnector
         name="amq2-nc" 
         uri="static:(failover:(tcp://192.168.0.166:61616))" 
         networkTTL="2" 
         duplex="true"
         dynamicOnly="true" 
  />

如果acticemq01代理可用,上述URL将始终连接到acticemq01代理。如果acticemq01停止,它将自动故障切换到acticemq02代理。另外,timeout=5000将确保使用者在5秒内抛出错误,以尝试连接到2个代理中的任何一个。

将networkConnector标记定义为:

<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>
failover:(tcp://192.168.0.166:61616,tcp://192.168.0.167:61616)?randomize=false&timeout=5000
激活Q01配置:

<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>
 <networkConnector
         name="amq1-nc" 
         uri="static:(failover:(tcp://192.168.0.167:61616))" 
         networkTTL="2" 
         duplex="true"
         dynamicOnly="true" 
  />
 <networkConnector
         name="amq2-nc" 
         uri="static:(failover:(tcp://192.168.0.166:61616))" 
         networkTTL="2" 
         duplex="true"
         dynamicOnly="true" 
  />

如果acticemq01代理可用,上述URL将始终连接到acticemq01代理。如果acticemq01停止,它将自动故障切换到acticemq02代理。另外,timeout=5000将确保消费者在5秒内抛出错误,以尝试连接到2个代理中的任何一个。

谢谢Anubhava!此配置的问题是,当我停止activemq01时,activemq02上的连接失败,但当我尝试重新启动activemq01并停止activemq02时,使用者没有故障恢复到activemq01。我的挂起队列一直在堆积,我花了大量时间研究和调整设置,不知道发生了什么。这仅在其中一个队列中发生。为了给您一些内部信息,以防您可以建议通过一些配置更改来提高性能:生产者将消息对象放入队列中,队列中有几十个单独的联系人,然后消费者(4)监听该队列,然后选择消息(对象),解析并交付给移除供应商,一次一个联系人。我们知道供应商交付的性能很慢,您认为如果我增加该队列上的预回迁大小(当前为100),它会纠正问题,并且消息不会堆积在挂起队列中吗?提前感谢如果您知道某个特定的消费者速度会很慢,建议将其预取大小设置为较小的值。对于您处理大型未决消息的特殊情况,我建议您查看此页面:流程如下:队列中的单个消息可能包含100个联系人,因此其中一个glassfish实例将从队列中拾取消息,然后解析对象消息并单独发送每个联系人,这大约需要4分钟。我的理解是,由于activemq希望在4分钟之前收到确认,因此它将它们标记为“重新传递”,并将其放入挂起队列。有没有办法在activemq中增加该特定队列的计时,使其等待acks/nacks大约4分钟?甚至根本不需要等待确认,只要开火然后忘记就行了?谢谢你,阿努巴瓦!此配置的问题是,当我停止activemq01时,activemq02上的连接失败,但当我尝试重新启动activemq01并停止activemq02时,使用者没有故障恢复到activemq01。我的挂起队列一直在堆积,我花了大量时间研究和调整设置,不知道发生了什么。这仅在其中一个队列中发生。为了给您一些内部信息,以防您可以建议通过一些配置更改来提高性能:生产者将消息对象放入队列中,队列中有几十个单独的联系人,然后消费者(4)监听该队列,然后选择消息(对象),解析并交付给移除供应商,一次一个联系人。我们知道供应商交付的性能很慢,您认为如果我增加该队列上的预回迁大小(当前为100),它会纠正问题,并且消息不会堆积在挂起队列中吗?提前感谢如果您知道某个特定的消费者速度会很慢,建议将其预取大小设置为较小的值。对于您处理大型未决消息的特殊情况,我建议您查看此页面:流程如下:队列中的单个消息可能包含100个联系人,因此其中一个glassfish实例将从队列中拾取消息,然后解析对象消息并单独发送每个联系人,这大约需要4分钟。我的理解是,由于activemq希望在4分钟之前收到确认,因此它将它们标记为“重新传递”,并将其放入挂起队列。有什么办法可以增加收入吗
<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>