我想在具有静态主机的 2 节点群集上启用消息重新分发。但它似乎不起作用。
1( 我有 10 个生产者写入节点 1上的队列"MyTestQueue"(但没有使用者(.
2( 我在节点 2 上有 1 个使用者(但没有生产者(使用来自节点 2 的消息。
我希望节点 1 会将消息重新分发到使用者所在的节点 2,但它没有。节点 1 上的消息计数仍等于发送到节点 1 的消息数。
我的代理中有以下配置.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>
如何使消息重新分发正常工作?
这可能与已知问题有关。在某些情况下,如果消息不包含应用程序属性字段,则代理无法对消息进行负载平衡。
你能试试吗?
有几件事...
- 你使用的是哪个版本的阿尔忒弥斯? 您是否尝试过使用 2.2.0 版重现此内容?
- 您使用哪种类型的客户端(例如 JMS、AMQP、STOMP 等(?
- 您是否有可重现的测试用例(例如,Artemis附带的示例之一的修改版本(?
- 配置元素<前向无消费者>在Artemis中无效(尽管它在旧版本的HornetQ中是无效的(。前向无消费者>
从群集连接配置中删除<address>jms</address>
- 每个群集连接仅适用于与指定地址匹配的地址。并确保使用的是兼容的客户端,因为当 1.x 客户端负载均衡到具有匹配使用者的节点时,从 1.x 客户端到 2.x 群集的消息会丢失。
这是ActiveMQ Artemis配置的官方工作示例,具有对称集群,按需负载平衡和消息重新分发