Live/Backup automatic client fail-over issue
mofarn Nov 28, 2012 4:24 AMHi all,
I have two standalone servers(live and backup) on the same machine. (Hornetq 2.2.14)
I want automatic client automatic fail-over mechanisem by instantiating connection factory (HornetQJMSConnectionFactory) directly (without jndi). I used jmsTemplate for sending messages!
My applicationContext.xml:
<bean name="connectionFactory" class="org.hornetq.jms.client.HornetQJMSConnectionFactory"> <constructor-arg name="ha" value="true" /> <constructor-arg> <bean class="org.hornetq.api.core.DiscoveryGroupConfiguration"> <constructor-arg value="231.7.7.7" /> <constructor-arg value="9876" /> </bean> </constructor-arg> <property name="clientFailureCheckPeriod" value="30000" /> <!-- default --> <property name="failoverOnInitialConnection" value="true" /> <property name="initialConnectAttempts" value="15" /> <property name="reconnectAttempts" value="5" /> <property name="retryInterval" value="1000" /> </bean> <bean name="messageSender" class="messaging.producer.MessageSender2"> <property name="jmsTemplate" ref="jmsTemplate" /> </bean> <bean name="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"> <property name="connectionFactory" ref="connectionFactory" /> </bean>
My code for senidng message:
public class MessageSender2 { private JmsTemplate jmsTemplate; public void setJmsTemplate(JmsTemplate jmsTemplate) { this.jmsTemplate = jmsTemplate; } public void send(final Serializable obj, final String queueName) { Queue queue = HornetQJMSClient.createQueue(queueName); try { jmsTemplate.send(queue, new MessageCreator() { @Override public Message createMessage(Session session) throws JMSException { ObjectMessage message = session.createObjectMessage(obj); return message; } }); System.out.println("message sent"); } catch(JmsException e) { e.printStackTrace(); } } }
Consider this scenario:
- Start live and backup server
- Start client sending 1000 messages with send method (messages sent succesfully)
- Shutdown the live server (Backup server is live now)
When client want resume sending messages, it can't fail-over and gets this error:
WARNING: Tried 15 times to connect. Now giving up on reconnecting it. org.springframework.jms.UncategorizedJmsException: Uncategorized exception occured during JMS processing; nested exception is javax.jms.JMSException: Failed to create session factory; nested exception is HornetQException[errorCode=2 message=Cannot connect to server(s). Tried with all available servers.] at org.springframework.jms.support.JmsUtils.convertJmsAccessException(JmsUtils.java:316) at org.springframework.jms.support.JmsAccessor.convertJmsAccessException(JmsAccessor.java:168) at org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:469) at org.springframework.jms.core.JmsTemplate.send(JmsTemplate.java:534) at messaging.producer.MessageSender2.send(MessageSender2.java:29) at test.Test.test1(Test.java:31) at test.Test.main(Test.java:50) Caused by: javax.jms.JMSException: Failed to create session factory at org.hornetq.jms.client.HornetQConnectionFactory.createConnectionInternal(HornetQConnectionFactory.java:605) at org.hornetq.jms.client.HornetQConnectionFactory.createConnection(HornetQConnectionFactory.java:119) at org.hornetq.jms.client.HornetQConnectionFactory.createConnection(HornetQConnectionFactory.java:114) at org.springframework.jms.support.JmsAccessor.createConnection(JmsAccessor.java:184) at org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:456) ... 4 more Caused by: HornetQException[errorCode=2 message=Cannot connect to server(s). Tried with all available servers.] at org.hornetq.core.client.impl.ServerLocatorImpl.createSessionFactory(ServerLocatorImpl.java:774) at org.hornetq.jms.client.HornetQConnectionFactory.createConnectionInternal(HornetQConnectionFactory.java:601) ... 8 more 128- Nov 28, 2012 12:16:51 PM org.hornetq.core.logging.impl.JULLogDelegate warn WARNING: Tried 15 times to connect. Now giving up on reconnecting it. org.springframework.jms.UncategorizedJmsException: Uncategorized exception occured during JMS processing; nested exception is javax.jms.JMSException: Failed to create session factory; nested exception is HornetQException[errorCode=2 message=Cannot connect to server(s). Tried with all available servers.] at org.springframework.jms.support.JmsUtils.convertJmsAccessException(JmsUtils.java:316) at org.springframework.jms.support.JmsAccessor.convertJmsAccessException(JmsAccessor.java:168) at org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:469) at org.springframework.jms.core.JmsTemplate.send(JmsTemplate.java:534) at messaging.producer.MessageSender2.send(MessageSender2.java:29) at test.Test.test1(Test.java:31) at test.Test.main(Test.java:50) Caused by: javax.jms.JMSException: Failed to create session factory at org.hornetq.jms.client.HornetQConnectionFactory.createConnectionInternal(HornetQConnectionFactory.java:605) at org.hornetq.jms.client.HornetQConnectionFactory.createConnection(HornetQConnectionFactory.java:119) at org.hornetq.jms.client.HornetQConnectionFactory.createConnection(HornetQConnectionFactory.java:114) at org.springframework.jms.support.JmsAccessor.createConnection(JmsAccessor.java:184) at org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:456) ... 4 more Caused by: HornetQException[errorCode=2 message=Cannot connect to server(s). Tried with all available servers.] at org.hornetq.core.client.impl.ServerLocatorImpl.createSessionFactory(ServerLocatorImpl.java:774) at org.hornetq.jms.client.HornetQConnectionFactory.createConnectionInternal(HornetQConnectionFactory.java:601) ... 8 more
I have no idea why it happens (or am i doing it right??); Please reply back, thanks in advance.
-
servers configs.zip 5.5 KB