ActiveMQ Artemis:2 节点集群不使用队列

ActiveMQ Artemis: 2 node cluster not working with a queue

我有一个非常简单的设置,有 2 个节点(相互连接)。 我有一个单元测试,它在队列中生成 10 条消息,然后使用队列中的所有消息,然后检查它是否收到了 10 条消息。

这里是生产者和消费者设置

<bean id="queueListener" class="SessionAwareMessageListener<TextMessage>" />
<jms:listener-container container-type="default" destination-type="queue" connection-factory="brokerPooledConnectionFactory" acknowledge="auto">
    <jms:listener destination="queue.private.mb.sanity.V4" ref="queueListener" />
</jms:listener-container>

<bean id="queuePublisher" class="org.springframework.jms.core.JmsTemplate">
    <property name="connectionFactory" ref="brokerPooledConnectionFactory" />
    <property name="defaultDestinationName" value="queue.private.mb.sanity.V4" />
</bean>

以及连接设置

<amq:connectionFactory
    brokerURL="failover:(tcp://${broker1.host}:${broker1.port},tcp://${broker2.host}:${broker2.port})?maxReconnectAttempts=1&amp;startupMaxReconnectAttempts=1"
    closeTimeout="100" id="brokerConnectionFactory" />

<!-- Pools of connections -->
<bean id="brokerPooledConnectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory" init-method="start" destroy-method="stop">
    <property name="maxConnections" value="5" />
    <property name="idleTimeout" value="0" />
    <property name="connectionFactory" ref="brokerConnectionFactory" />
    <property name="maximumActiveSessionPerConnection" value="100" />
    <property name="timeBetweenExpirationCheckMillis" value="60000" />
    <property name="expiryTimeout" value="600000" />
</bean>

我看到消息在 2 个节点上发送。 第二个节点收到的消息全部被消费掉。 在第 1 个节点上收到的一些消息被路由到第 2 个节点并从第 2 个节点使用。 在 1st 节点上收到的其他消息既不被路由也不被消费。

如果我启动一个直接连接到第一个节点的消费者,它就能够消费消息。

使用主题而不是队列的相同测试工作正常。

知道我为什么会遇到这种行为吗?

谢谢

尼古拉斯

的确,这是一个设置问题。消息负载平衡设置为 STRICT 而不是 ON_DEMAND.