29.4. メッセージ再分配

メッセージ再分配では、コンシューマーのないキューから、クラスター内で、一致するコンシューマーを持つ他のノードにメッセージを自動的に再分配するように JBoss EAP メッセージングを設定できます。この機能を有効にするには、クラスター接続の message-load-balancing-typeON_DEMAND (デフォルト値) に設定する必要があります。これは、以下の管理 CLI コマンドを使用して設定できます。

/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-settingredistribution-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>

コンシューマーが閉じても、同じキューに別のコンシューマーがすぐに作成されることがよくあるため、多くの場合、再分配前に遅延を導入するのが理にかなっています。この場合、新しいコンシューマーがすぐに到達するため、即座の再分配は好ましくないでしょう。

以下は、「jms」から始まるアドレスにバインドされているキューまたはトピックに対して 0redistribution-delay を設定する address-setting の例です。この場合、メッセージは即座に再分配されます。

<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)