8.6. ロードバランサーを介したメッセージング

JBoss EAP をロードバランサーとして使用する場合、クライアントは静的 Undertow HTTP ロードバランサーまたは mod_cluster ロードバランサーの内側でメッセージングサーバーを呼び出します。

静的ロードバランサーを使用してメッセージングサーバーを呼び出すメッセージングクライアントをサポートする設定は、以下の要件を満たす必要があります。

  • JBoss EAP をロードバランサーとして使用する場合は、HTTP または HTTPS を使用してロードバランサーを設定する必要があります。AJP はメッセージングロードバランサーではサポートされません。

  • ロードバランサーの背後のメッセージングサーバーで JNDI ルックアップが発生する場合は、バックエンドメッセージングワーカーを設定する必要があります。
  • クライアントがロードバランサーに接続する場合、ロードバランサーへの最初の接続を再利用して、それらが同じサーバーと通信できるようにする必要があります。クライアントがロードバランサーに接続する場合は、クラスタートポロジーを使用してロードバランサーに接続することはできません。クラスタートポロジーを使用すると、メッセージが別のサーバーに送信される可能性があります。そのため、トランザクション処理が中断される可能性があります。

mod_cluster を使用して Undertow をロードバランサーとして設定する方法の詳細は、JBoss EAP『設定ガイド』の「mod_cluster を使用して Undertow をロードバランサーとして設定」を参照してください。

ロードバランサーを介して通信するメッセージングクライアントの設定

ロードバランサーに接続するクライアントでは、クラスタートポロジーを使用してロードバランサーに接続するのではなく、初期接続を再利用するように設定する必要があります。

最初の接続を再利用すると、クライアントが同じサーバーに接続します。クラスタートポロジーを使用すると、メッセージが別のサーバーに転送され、トランザクション処理が中断される可能性があります。

ロードバランサーへの接続に使用される接続ファクトリーまたはプールされた接続ファクトリーは、use-topology-for-load-balancing 属性を false に設定する必要があります。以下の例では、CLI でこの設定を定義する方法を示しています。

/subsystem=messaging-activemq/pooled-connection-factory=remote-artemis:write-attribute(name=use-topology-for-load-balancing, value=false)

バックエンドワーカーの設定

バックエンドメッセージングワーカーは、ロードバランサーの内側で JNDI ルックアップを行う予定がある場合のみ設定する必要があります。

  1. ロードバランシングサーバーを参照する新しいアウトバウンドソケットバインディングを作成します。

    /socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=balancer-binding:add(host=load_balance.example.com,port=8080)
  2. ロードバランシングサーバーのソケットバインディングを参照する HTTP コネクターを作成します。

    /subsystem=messaging-activemq/server=default/http-connector=balancer-connector:add(socket-binding=balancer-binding, endpoint=http-acceptor)
  3. HTTP コネクターをクライアントで使用される接続ファクトリーに追加します。

    /subsystem=messaging-activemq/server=default/connection-factory=RemoteConnectionFactory:write-attribute(name=connectors,value=[balancer-connector])

    クライアントを設定して、初期接続を再利用します。

    /subsystem=messaging-activemq/server=default/connection-factory=RemoteConnectionFactory:write-attribute(name=use-topology-for-load-balancing,value=false)