29.2. サーバー側のメッセージロードバランシング
クラスター接続がクラスターのノード間で定義されている場合、JBoss EAP メッセージングはクライアントから特定ノードに到達するメッセージを負荷分散します。
メッセージングクラスター接続は、一致するコンシューマーが他のノードにあるかどうかに関係なく、ラウンドロビン方式でメッセージを負荷分散するように設定できます。一致するコンシューマーが存在する場合にのみ、他のノードに分散するように設定することもできます。詳細は、メッセージ再分配 セクションを参照してください。
クラスター接続の設定
クラスター接続はサーバーをクラスターにグループ化します。このため、クラスターのノード間でメッセージの負荷を分散できます。クラスター接続は、cluster-connection
要素を使用して JBoss EAP サーバー設定に定義します。
Red Hat は、messaging-activemq
サブシステム内で 1 つの cluster-connection
の使用のみをサポートします。
以下は、*-full
プロファイルおよび *-full-ha
プロファイルで定義されているデフォルトの cluster-connection
です。属性の詳細リストは、クラスター接続の属性 を参照してください。
<subsystem xmlns="urn:jboss:domain:messaging-activemq:4.0"> <server name="default"> ... <cluster-connection name="my-cluster" discovery-group="dg-group1" connector-name="http-connector" address="jms"/> ... </server> </subsystem>
上記の場合、クラスター接続は jms から始まるアドレスに送信されるメッセージを負荷分散します。このクラスター接続は、サブ文字列 jms から始まるコアキューにマップされるので、すべての JMS キューおよびトピックに適用されます。
パケットがクラスター接続を使用して送信され、ブロックされた状態で確認応答を待機している場合、call-timeout
属性は例外を出力する前に応答を待機する時間を指定します。デフォルト値は 30000
です。たとえば、リモート JMS ブローカーがネットワークから切断され、トランザクションが不完全な場合、スレッドは接続が再確立されるまでスタック状態のままになる可能性があります。この状況を回避するには、call-failover-timeout
属性を call-timeout
属性と一緒に使用することが推奨されます。call-failover-timeout
属性は、フェイルオーバーの試行中に呼び出しが行われる場合に使用されます。デフォルト値は -1
で、タイムアウトなしを意味します。クライアントフェイルオーバーに関する詳細は、自動クライアントフェイルオーバー を参照してください。
または、クラスター接続で、検出にサーバーの静的リストを使用する場合は、static-connectors
属性を使用することができます。例を以下に示します。
<subsystem xmlns="urn:jboss:domain:messaging-activemq:4.0"> <server name="default"> ... <cluster-connection name="my-cluster" static-connectors="server0-connector server1-connector" .../> ... </server> </subsystem>
この例には 2 つのサーバーが定義され、少なくとも 1 つが使用可能になることがわかります。クラスターにはさらに多くのサーバーが存在する場合があります。しかし、これらは、初期接続が確立されると、これらのコネクターのいずれかを使用して検出されます。
重複検出のためのクラスター接続の設定
クラスター接続は、クラスターのノード間でメッセージを移動するために内部的に コアブリッジ を使用します。重複メッセージ検出にクラスター接続を設定するには、use-duplicate-detection
属性を true
(デフォルト値) に設定します。
/subsystem=messaging-activemq/server=default/cluster-connection=my-cluster:write-attribute(name=use-duplicate-detection,value=true)
クラスターユーザーの認証情報
クラスターのノード間で接続を作成し、クラスター接続を形成するとき、JBoss EAP メッセージングはクラスターのユーザーとパスワードを使用します。
以下の管理 CLI コマンドを使用して、クラスターのユーザーとパスワードを設定できます。
/subsystem=messaging-activemq/server=default:write-attribute(name=cluster-user,value="NewClusterUser") /subsystem=messaging-activemq/server=default:write-attribute(name=cluster-password,value="NewClusterPassword123")
これにより、以下の XML コンテンツが JBoss EAP 設定ファイルの messaging-activemq
サブシステムに追加されます。
<subsystem xmlns="urn:jboss:domain:messaging-activemq:4.0"> <server name="default"> ... <cluster user="NewClusterUser" password="NewClusterPassword123"/> ... </server> </subsystem>
cluster-user
のデフォルト値は ACTIVEMQ.CLUSTER.ADMIN.USER
で、cluster-password
のデフォルト値は CHANGE ME!!
です。これらの値はデフォルトから変更するか、リモートクライアントがデフォルト値を使用してサーバーへ接続できるようにする必要があります。デフォルトから変更されない場合、JBoss EAP メッセージングはこれを検出し、起動するたびに警告を表示します。
cluster-credential-reference
属性を使用して、クラスターパスワードを設定する代わりにクレデンシャルストアを参照することもできます。
/subsystem=messaging-activemq/server=default:write-attribute(name=cluster-credential-reference,value={clear-text=SecretStorePassword})