面对ActiveMQ Artemis的集群测试问题

时间:2017-11-30 09:50:29

标签: activemq activemq-artemis

我有2个ActiveMQ Artemis实例,只需使用命令创建 /.artemis create artemis / server1

/.artemis create artemis / server2

我正在使用linux ubantu。

这是 server1的broker.xml:

  <acceptors>
     <!-- Acceptor for every supported protocol -->
     <acceptor name="artemis">tcp://0.0.0.0:61616?tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;protocols=CORE,AMQP,STOMP,HORNETQ,MQTT,OPENWIRE;useEpoll=true;amqpCredits=1000;amqpLowCredits=300</acceptor>

  </acceptors>

  <connectors>
     <connector name="netty-connector">tcp://localhost:61616</connector>
     <!-- connector to the server1 -->
     <connector name="server1-connector">tcp://localhost:61617</connector>
  </connectors>

 <cluster-connections>
     <cluster-connection name="my-cluster">
        <connector-ref>netty-connector</connector-ref>
        <retry-interval>500</retry-interval>
        <use-duplicate-detection>true</use-duplicate-detection>
        <message-load-balancing>STRICT</message-load-balancing>
        <max-hops>1</max-hops>
        <static-connectors>
           <connector-ref>server1-connector</connector-ref>
        </static-connectors>
     </cluster-connection>
  </cluster-connections>

这里是 server2的broker.xml:       

     <!-- Acceptor for every supported protocol -->
   <acceptor name="artemis">tcp://0.0.0.0:61617?tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;protocols=CORE,AMQP,STOMP,HORNETQ,MQTT,OPENWIRE;useEpoll=true;amqpCredits=1000;amqpLowCredits=300</acceptor>
  </acceptors>

  <connectors>
     <connector name="netty-connector">tcp://localhost:61617</connector>
     <!-- connector to the server0 -->
     <connector name="server0-connector">tcp://localhost:61616</connector>
  </connectors>

  <cluster-connections>
     <cluster-connection name="my-cluster">
        <connector-ref>netty-connector</connector-ref>
        <retry-interval>500</retry-interval>
        <use-duplicate-detection>true</use-duplicate-detection>
        <message-load-balancing>STRICT</message-load-balancing>
        <max-hops>1</max-hops>
        <static-connectors>
           <connector-ref>server0-connector</connector-ref>
        </static-connectors>
     </cluster-connection>
  </cluster-connections>

同样在server2中,更改bootstrap.xml,更改Web绑定端口

<web bind="http://localhost:8163" path="web">

我正在使用StaticClusteredQueueExample和此示例工作文件对其进行测试。

现在我正在针对我的群集运行ActiveMQ Artemis JMeter性能,我正在使用JMeter测试示例here

现在,当我使用Jmeter运行point to point test时,消费者的错误率接近50%(Jmeter中的聚合报告),

但是我在ubantu系统中只运行一个节点(server1或server2中的任何一个),它工作正常,错误率为0%(Jmeter中的聚合报告)。

在使用docker运行多个实例(节点)时,能否帮助我获得50%的错误率(Jmeter中的聚合报告)

1 个答案:

答案 0 :(得分:1)

问题在于您将一个示例(即JMeter示例)与群集配置(即来自群集静态发现示例)混合在一起,这实际上是不兼容的。

群集的<message-load-balancing>是STRICT,这意味着无论消费者是否存在,消息都将在群集中进行负载平衡。此外,默认<redistribution-delay>为-1表示由于STRICT消息负载平衡类型而发送到集群中其他节点的消息将保留在这些节点上,并且不会根据消费者需求重新分配。

JMeter示例在编写时考虑了单个节点,因此它只向1个节点发送消息并使用消息,这意味着它只接收它发送的一半消息,因为另一半将被转发到由于配置,集群中的其他节点。

如果您更改&lt; message-load-balancing&gt;到ON_DEMAND,您将看不到任何错误,因为所有消息都将保留在专门发送的节点上,这也是消费者将连接的位置。