1

我想在我的带有静态主机的 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>

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

4

3 回答 3

2

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

请你试试看好吗?

于 2017-08-16T12:37:31.310 回答
1

几件事...

  • 您使用的是哪个版本的 Artemis?您是否尝试过使用 2.2.0 版重现此内容?
  • 您使用的是哪种客户端(例如 JMS、AMQP、STOMP 等)?
  • 您是否有可重现的测试用例(例如,Artemis 附带的示例之一的修改版本)?
  • 配置元素 <forward-when-no-consumers> 在 Artemis 中无效(尽管它在旧版本的 HornetQ 中)。
于 2017-09-01T19:17:51.250 回答
0

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

这是具有对称集群、按需负载平衡和消息重新分配的 ActiveMQ Artemis 配置的官方工作示例

于 2018-01-31T21:46:17.593 回答