ArtemisMQ 2.x上的邮件重新分发不起作用

时间:2017-08-15 17:39:16

标签: activemq hornetq activemq-artemis

我想在具有静态主机的2节点群集上启用消息重新分发。但它似乎没有用。

1)我有10个生产者写入队列" MyTestQueue"在节点1上(但没有消费者) 2)我在节点2(但没有生产者)上有1个消费者,它消耗来自节点2的消息。

我希望节点1将消息重新分发到消费者所在的节点2,但事实并非如此。节点1上的消息计数仍等于发送到节点1的消息数量。

我在broker.xml中有以下配置,将forward-when-no-consumers设置为false。 我还将redistribution-delay设置为零值。

<jms xmlns="urn:activemq:jms">
    <queue name="MyTestQueue"/>
</jms>
...
<cluster-connections>
      <cluster-connection name="my-test-cluster">
           <address>jms</address>
           <connector-ref>server0-connector</connector-ref>
            <retry-interval>500</retry-interval>
            <use-duplicate-detection>true</use-duplicate-detection>
            <forward-when-no-consumers>false</forward-when-no-consumers>
            <message-load-balancing>ON_DEMAND</message-load-balancing>
            <max-hops>1</max-hops>
            <confirmation-window-size>1024</confirmation-window-size>
            <static-connectors>
                <connector-ref>server1-connector</connector-ref>
            </static-connectors>
        </cluster-connection>
    </cluster-connections>
    ...
    <address-settings>
         <address-setting match="#">
             <redelivery-delay>5000</redelivery-delay>
             <redelivery-delay-multiplier>3</redelivery-delay-multiplier>
             <max-redelivery-delay>10000</max-redelivery-delay>
             <max-delivery-attempts>10</max-delivery-attempts>
             <max-size-bytes>104857600</max-size-bytes>
             <page-size-bytes>10485760</page-size-bytes>
             <address-full-policy>PAGE</address-full-policy>
             <redistribution-delay>0</redistribution-delay>
        </address-setting>
    </address-settings>

如何让消息重新分配起作用?

3 个答案:

答案 0 :(得分:2)

这可能与已知的issue有关。如果消息不包含应用程序属性字段,则代理无法对消息进行负载平衡。

请你尝试一下吗?

答案 1 :(得分:1)

一些事情......

  • 您使用的是什么版本的Artemis?您是否尝试过使用2.2.0版本进行复制?
  • 您使用的是哪种客户端(例如JMS,AMQP,STOMP等)?
  • 您是否有可重现的测试用例(例如Artemis附带的其中一个示例的修改版本)?
  • 配置元素&lt;无消费者前转&gt;在Artemis中无效(虽然它是旧版本的HornetQ)。

答案 2 :(得分:0)

从群集连接配置中删除<address>jms</address> - 每个群集连接仅适用于与指定地址匹配的地址。并确保您使用兼容的客户端,因为当负载平衡到具有匹配使用者的节点时,从1.x客户端到2.x群集的消息将丢失。

Here's official, working example of ActiveMQ Artemis configuration with symmetric cluster, on demand load balancing and message redistribution