36.4. クライアントサイドロードバランシング
HornetQ のクライアントサイドロードバランシングにより、単一のセッションファクトリーを使用して作成された後続のセッションはクラスターのさまざまなノードに接続できます。これにより、セッションはクラスターのノード間で円滑に分散でき、特定のノードに「集中する」ことがなくなります。
クライアントファクトリーにより使用されるロードバランシングポリシーは設定可能です。HornetQ には 2 つのすぐに使用できるロードバランシングポリシーが用意されており、独自のポリシーを実装し、使用することもできます。
すぐに使用できるポリシーは以下のとおりです。
- ラウンドロビン。このポリシーを使用すると、最初のノードがランダムに選択され、後続の各ノードが同じ順序で順番に選択されます。たとえば、ノードは B、C、D、A、B、C、D、A、B または D、A、B、C、A、B、C、D、A、または C、D、A、B、C、D、A、B、C、D、A の順序で選択できます。
- ラインダム。このポリシーでは、各ノードがランダムに選択されます。
インターフェース
org.hornetq.api.core.client.loadbalance.ConnectionLoadBalancingPolicy を実装することにより、独自のポリシーを実装できます。
使用するロードバランシングポリシーの指定は、JMS を使用するか、コア API を使用するかによって異なります。ポリシーを指定しない場合は、デフォルト値
org.hornetq.api.core.client.loadbalance.RoundRobinConnectionLoadBalancingPolicy が使用されます。
JMS を使用し、サーバーで JNDI を使用して JMS 接続ファクトリーを JNDI に格納する場合は、以下のようにサーバーの
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
上記の例では、ランダムな接続ロードバランシングポリシーを使用する JMS 接続ファクトリーがデプロイされます。
JBOSS_DIST/jboss-as/server/PROFILE/deploy/hornetq/hornetq-jms.xml 設定ファイルでロードバランシングポリシーを直接指定できます。
JMS を使用し、クライアントサイドで接続ファクトリーを直接インスタンス化する場合は、使用前に
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
HornetQConnectionFactory で setter を使用してロードバランシングポリシーを設定できます。
ConnectionFactory jmsConnectionFactory = HornetQJMSClient.createConnectionFactory(...);
jmsConnectionFactory.setLoadBalancingPolicyClassName("com.acme.MyLoadBalancingPolicy");
ConnectionFactory jmsConnectionFactory = HornetQJMSClient.createConnectionFactory(...);
jmsConnectionFactory.setLoadBalancingPolicyClassName("com.acme.MyLoadBalancingPolicy");
コア API を使用する場合は、使用している
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
ClientSessionFactory インスタンスで直接ロードバランシングポリシーを設定できます。
ClientSessionFactory factory = HornetQClient.createClientSessionFactory(...);
factory.setLoadBalancingPolicyClassName("com.acme.MyLoadBalancingPolicy");
ClientSessionFactory factory = HornetQClient.createClientSessionFactory(...);
factory.setLoadBalancingPolicyClassName("com.acme.MyLoadBalancingPolicy");
ファクトリーが負荷分散するサーバーのセットは以下の 2 つのいずれかの方法で決定できます。
- サーバーを明示的に指定
- 検出の使用。