이 콘텐츠는 선택한 언어로 제공되지 않습니다.
36.4. Client-Side Load balancing
With HornetQ client-side load balancing, subsequent sessions created using a single session factory can be connected to different nodes of the cluster. This allows sessions to spread smoothly across the nodes of a cluster and not be "clumped" on any particular node.
The load balancing policy to be used by the client factory is configurable. HornetQ provides two out-of-the-box load balancing policies and you can also implement your own and use that.
The out-of-the-box policies are:
- Round Robin. With this policy the first node is chosen randomly then each subsequent node is chosen sequentially in the same order.For example nodes might be chosen in the order B, C, D, A, B, C, D, A, B or D, A, B, C, A, B, C, D, A or C, D, A, B, C, D, A, B, C, D, A.
- Random. With this policy each node is chosen randomly.
It is possible to implement your own policy by implementing the interface
org.hornetq.api.core.client.loadbalance.ConnectionLoadBalancingPolicy
Specifying which load balancing policy to use differs whether you are using JMS or the core API. If you do not specify a policy then the default will be used which is
org.hornetq.api.core.client.loadbalance.RoundRobinConnectionLoadBalancingPolicy
.
If you are using JMS, and you are using JNDI on the server to put your JMS connection factories into JNDI, then you can specify the load balancing policy directly in the
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
The above example would deploy a JMS connection factory that uses the random connection load balancing policy.
JBOSS_DIST/jboss-as/server/<PROFILE>/deploy/hornetq/hornetq-jms.xml
configuration file on the server as follows:
If you are using JMS but you are instantiating your connection factory directly on the client side then you can set the load balancing policy using the setter on the
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
HornetQConnectionFactory
before using it:
ConnectionFactory jmsConnectionFactory = HornetQJMSClient.createConnectionFactory(...); jmsConnectionFactory.setLoadBalancingPolicyClassName("com.acme.MyLoadBalancingPolicy");
ConnectionFactory jmsConnectionFactory = HornetQJMSClient.createConnectionFactory(...);
jmsConnectionFactory.setLoadBalancingPolicyClassName("com.acme.MyLoadBalancingPolicy");
If you are using the core API, you can set the load balancing policy directly on the
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
ClientSessionFactory
instance you are using:
ClientSessionFactory factory = HornetQClient.createClientSessionFactory(...); factory.setLoadBalancingPolicyClassName("com.acme.MyLoadBalancingPolicy");
ClientSessionFactory factory = HornetQClient.createClientSessionFactory(...);
factory.setLoadBalancingPolicyClassName("com.acme.MyLoadBalancingPolicy");
The set of servers over which the factory load balances can be determined in one of two ways:
- Specifying servers explicitly
- Using discovery.