29.4. メッセージ再分配
メッセージ再分配では、コンシューマーのないキューから、クラスター内で、一致するコンシューマーを持つ他のノードにメッセージを自動的に再分配するように 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)
/subsystem=messaging-activemq/server=default/cluster-connection=my-cluster:write-attribute(name=message-load-balancing-type,value=ON_DEMAND)
メッセージ再分配は、キューの最後のコンシューマーが閉じられた直後に起動するように、または、キューの最後のコンシューマーが閉じられてから再分配するまで、設定可能な遅延時間を待機するように設定できます。これは redistribution-delay
属性を使用して設定します。
redistribution-delay
属性を使用して、キューで最後のコンシューマーが閉じられてから、一致するコンシューマーを持つクラスターの他のノードにそのキューからメッセージを再分配するまでの待機時間 (ミリ秒) を設定します。-1
(デフォルト値) は、メッセージが再分配されないことを意味します。値が 0
の場合は、メッセージが即座に再分配されることを意味します。
デフォルトの JBoss EAP 設定の address-setting
は redistribution-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>
<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>
コンシューマーが閉じても、同じキューに別のコンシューマーがすぐに作成されることがよくあるため、多くの場合、再分配前に遅延を導入するのが理にかなっています。この場合、新しいコンシューマーがすぐに到達するため、即座の再分配は好ましくないでしょう。
以下は、jms から始まるアドレスにバインドされているキューまたはトピックに対して 0
の redistribution-delay
を設定する address-setting
の例です。この場合、メッセージは即座に再分配されます。
<subsystem xmlns="urn:jboss:domain:messaging-activemq:4.0"> <server name="default"> ... <address-setting name="jms.#" redistribution-delay="0"/> ... </server> </subsystem>
<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)
/subsystem=messaging-activemq/server=default/address-setting=jms.#:add(redistribution-delay=1000)