Remote hornetq cluster cannot be connected using discovery group.
ther25 Jun 22, 2012 6:17 AMHello,
I have set up a hornetq cluster (live-backup) using static connectors which look in the following way:
<connector name="node1"> <factory-class>org.hornetq.core.remoting.impl.netty.NettyConnectorFactory</factory-class> <param key="host" value="valid_ip"/> <param key="port" value="5445"/> </connector>
Connection factories on the remote client are defined as follows:
<pooled-connection-factory name="hornetq-ra"> <transaction mode="xa"/> <connectors> <connector-ref connector-name="node1"/> <connector-ref connector-name="node2"/> ... </connectors> <entries> <entry name="java:/JmsXA"/> </entries> </pooled-connection-factory>
Remote clients are connecting correctly to cluster and are able to recognize live server failure.
I have then added broadcast group to members of the hornetq cluster:
<broadcast-groups> <broadcast-group name="hornetq-bgroup"> <group-address>231.8.8.8</group-address> <group-port>9876</group-port> <broadcast-period>5000</broadcast-period> <connector-ref>node1</connector-ref> <connector-ref>node2</connector-ref> ... </broadcast-group> </broadcast-groups>
And then checked with tcpdump on the remote client to make sure UDP broadcast is happenning (and sent by live host).
Afterwards I modified configuration on the remote client:
<discovery-groups> <discovery-group name="hornetq-bgroup"> <group-address>231.8.8.8</group-address> <group-port>9876</group-port> <refresh-timeout>10000</refresh-timeout> </discovery-group> </discovery-groups> <pooled-connection-factory name="hornetq-ra"> <discovery-group-ref discovery-group-name="hornetq-bgroup"/> <transaction mode="xa"/> <entries> <entry name="java:/JmsXA"/> </entries> </pooled-connection-factory>
And clients are not longer able to connect, error message on the client looks as follows:
11:49:10,181 WARN [org.hornetq.jms.server.recovery.HornetQXAResourceWrapper] (Periodic Recovery) Can't connect to any hornetq server on recovery [XARecoveryConfig [hornetQConnectionFactory=HornetQConnectionFactory [serverLocator=ServerLocatorImpl [initialConnectors=[org-hornetq-core-remoting-impl-netty-NettyConnectorFactory?port=5445&host=xx-xx-xx-xx], discoveryGroupConfiguration=DiscoveryGroupConfiguration [discoveryInitialWaitTimeout=10000, groupAddress=231.8.8.8, groupPort=9876, localBindAddress=null, name=4890695c-bc4e-11e1-8a88-e89a8f13d910, refreshTimeout=10000]], clientID=null, dupsOKBatchSize=1048576, transactionBatchSize=1048576, readOnly=false], username=null, password=null]]
11:49:10,183 WARN [com.arjuna.ats.jta] (Periodic Recovery) ARJUNA016027: Local XARecoveryModule.xaRecovery got XA exception XAException.XAER_RMERR: javax.transaction.xa.XAException: Error trying to connect to any providers for xa recovery
at org.hornetq.jms.server.recovery.HornetQXAResourceWrapper.getDelegate(HornetQXAResourceWrapper.java:275) [hornetq-jms-2.2.13.Final.jar:]
at org.hornetq.jms.server.recovery.HornetQXAResourceWrapper.recover(HornetQXAResourceWrapper.java:77) [hornetq-jms-2.2.13.Final.jar:]
at com.arjuna.ats.internal.jta.recovery.arjunacore.XARecoveryModule.xaRecovery(XARecoveryModule.java:503) [jbossjts-4.16.2.Final.jar:]
at com.arjuna.ats.internal.jta.recovery.arjunacore.XARecoveryModule.resourceInitiatedRecoveryForRecoveryHelpers(XARecoveryModule.java:471) [jbossjts-4.16.2.Final.jar:]
at com.arjuna.ats.internal.jta.recovery.arjunacore.XARecoveryModule.bottomUpRecovery(XARecoveryModule.java:385) [jbossjts-4.16.2.Final.jar:]
at com.arjuna.ats.internal.jta.recovery.arjunacore.XARecoveryModule.periodicWorkSecondPass(XARecoveryModule.java:166) [jbossjts-4.16.2.Final.jar:]
at com.arjuna.ats.internal.arjuna.recovery.PeriodicRecovery.doWorkInternal(PeriodicRecovery.java:789) [jbossjts-4.16.2.Final.jar:]
at com.arjuna.ats.internal.arjuna.recovery.PeriodicRecovery.run(PeriodicRecovery.java:371) [jbossjts-4.16.2.Final.jar:]
Caused by: HornetQException[errorCode=2 message=null]
at org.hornetq.jms.server.recovery.HornetQXAResourceWrapper.connect(HornetQXAResourceWrapper.java:351) [hornetq-jms-2.2.13.Final.jar:]
at org.hornetq.jms.server.recovery.HornetQXAResourceWrapper.getDelegate(HornetQXAResourceWrapper.java:251) [hornetq-jms-2.2.13.Final.jar:]
... 7 more
Where boldened part is IP of a backup machine, not live. Live machine is not discovered at all.
I checked jboss-as-messaging_1_1.xsd and there is not explicit way to define backup connector in broadcast group.
However when I remove connector to backup machine in broadcast configuration live server is discovered by the remote client, but failover isn't happenning.
Is it a bug or configuration issue?