【问题标题】:Message redistribution on ArtemisMQ 2.x does not workArtemisMQ 2.x 上的消息重新分发不起作用
【发布时间】:2018-01-23 16:50:43
【问题描述】:

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

1) 我有 10 个生产者写入节点 1 上的队列“MyTestQueue”(但没有消费者)。
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>

我怎样才能使消息重新分发工作?

【问题讨论】:

    标签: hornetq activemq-artemis


    【解决方案1】:

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

    请你试试看好吗?

    【讨论】:

    • 谢谢!您能否指定我必须设置什么样的应用程序属性以及在哪里设置?在客户端?在 broker.xml 中?
    • @Rox 在您发送的消息上设置一些应用程序属性。任何事情都应该有效。只是不要在没有任何应用程序属性的情况下完全发送消息。
    • @user7610:哦,我明白了!我将尝试在消息上设置一个字符串属性,看看它是否有效。会带着结果回到这里。
    • @user7610:现在我已经测试过了,不幸的是它对我不起作用。 :-( 消息仍然没有重新分发到有消费者的节点。
    • 您能否提供有关您的配置以及您为配置集群所采取的步骤的更多详细信息?例如,您是否在所有节点上都创建了队列?我将您的配置与我的配置进行了比较,我的配置要简单得多。就我而言,我是通过命令行配置的。
    【解决方案2】:

    几件事...

    • 您使用的是哪个版本的 Artemis?您是否尝试过使用 2.2.0 版重现此内容?
    • 您使用的是哪种客户端(例如 JMS、AMQP、STOMP 等)?
    • 您是否有可重现的测试用例(例如,Artemis 附带的示例之一的修改版本)?
    • 配置元素 在 Artemis 中无效(尽管它在旧版本的 HornetQ 中使用)。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2019-03-28
        • 1970-01-01
        • 2013-04-10
        • 1970-01-01
        • 2014-08-13
        • 1970-01-01
        • 1970-01-01
        • 2022-06-13
        • 2018-01-13
        相关资源
        最近更新 更多