0

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

/.artemis 创建 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 Performance,我正在使用这里的 JMeter 测试示例

现在,当我使用 Jmeter运行点对点测试时,消费者的错误率接近 50%(Jmeter 中的汇总报告),

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

您能否帮助我在使用 docker 运行多个实例(节点)时得到 50% 的错误率(Jmeter 中的汇总报告)

4

1 回答 1

1

问题是您将一个示例(即 JMeter 示例)与一个真正不兼容的集群配置(即来自 clustered-static-discovery 示例)混合在一起。

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

JMeter 示例是在考虑单个节点的情况下编写的,因此它只向 1 个节点发送消息并使用来自 1 个节点的消息,这意味着它只会收到它发送的消息的一半,因为另一半将被转发到另一个节点集群由于配置。

如果您将 <message-load-balancing> 更改为 ON_DEMAND,您将不会看到任何错误,因为所有消息都将保留在专门发送它们的节点上,这也是连接消费者的地方。

于 2017-12-02T00:03:14.007 回答