29.4. 消息 Redistribution
通过消息重新发布,JBoss EAP 消息传递可以配置为从队列自动重新分发消息,这些队列中没有任何使用者返回到群集中具有匹配使用者的其他节点。要启用此功能,集群连接的 message-load-balancing-type 必须设置为 ON_DEMAND,这是默认值。您可以使用以下管理 CLI 命令设置此项:
/subsystem=messaging-activemq/server=default/cluster-connection=my-cluster:write-attribute(name=message-load-balancing-type,value=ON_DEMAND)
可以将消息重新分发配置为在队列上的最后一个使用者关闭后立即启动,或者在队列上的最后一个使用者关闭后等待可配置的延迟再分发。这使用 reload -delay 属性进行配置。
您可以使用 重新发布-delay 属性设置在队列中最后一个消费者关闭后等待多少毫秒,然后再将来自该队列的消息重新分发到群集中匹配消费者的其他节点。值为 -1 (默认值)表示永远不会重新分发消息。值 0 表示将立即重新分发消息。
默认 JBoss EAP 配置中的 address-setting 设置 re istribute-delay 值 1000,这意味着它将等待 1000 毫秒后再分发消息。
<subsystem xmlns="urn:jboss:domain:messaging-activemq:4.0">
<server name="default">
...
<address-setting name="#" redistribution-delay="1000" message-counter-history-day-limit="10" page-size-bytes="2097152" max-size-bytes="10485760" expiry-address="jms.queue.ExpiryQueue" dead-letter-address="jms.queue.DLQ"/>
...
</server>
</subsystem>
在重新分发之前引入延迟通常比较适当,因为消费者关闭,但在同一队列中快速创建另一个延迟的情况通常比较适当。在这种情况下,您可能不想立即重新分发,因为新消费者很快会到达。
以下是 address-setting 的示例,它为绑定到 以"jms"开头的地址的任何队列或主题设置重新分配-delay 0。在这种情况下,消息将立即重新分发。
<subsystem xmlns="urn:jboss:domain:messaging-activemq:4.0">
<server name="default">
...
<address-setting name="jms.#" redistribution-delay="0"/>
...
</server>
</subsystem>
此地址设置可通过以下管理 CLI 命令添加:
/subsystem=messaging-activemq/server=default/address-setting=jms.#:add(redistribution-delay=1000)