JBoss Messaging/Remoting stop working if one of the two network interfaces is disconnected
fharms Nov 4, 2013 9:37 AMHello,
I’m investigating a network issue between our client and server(JBoss5 cluster) with jboss messaging 1.4.3.SP9 and remoting 2.5.4.SP2 stops sending heartbeats if one of the network interfaces is disconnected.
We have client both on the WIFI and eth0 network and a topic jms connection is establish to the server. Through WireShark we can see it sending heartbeats on the eth0 to both servers and netstat indicate it has establish a connection on the eth0 interface
If we disconnect eth0 after a while the heartbeat that was broadcast on eth0 of course stops, but the strange thing is the control service does not seem discover a heartbeat is not sent and received on anymore on the client. WireShark indicate no communication on the control port on the working network interface and no exception is throwed in the client.
In fact JBoss Messaging think everything is okay, but messages is never arriving on the client.
Could this be a configuration issue or does the JBoss Messaging / Remoting not support multiple network interfaces?
<?xml version="1.0" encoding="UTF-8"?>
<!--
Standard bisocket-based Remoting service deployment descriptor.
$Id: remoting-bisocket-service.xml 3981 2008-03-28 18:00:41Z timfox $
-->
<server>
<!-- Standard bisocket connector - the bisocket transport only opens connection from client->server
so can be used with firewalls where only outgoing connections are allowed.
For examples of HTTP and SSL transports see docs/examples -->
<mbean code="org.jboss.remoting.transport.Connector"
name="jboss.messaging:service=Connector,transport=bisocket"
display-name="Bisocket Transport Connector">
<attribute name="Configuration">
<config>
<invoker transport="bisocket">
<!-- There should be no reason to change these parameters - warning!
Changing them may stop JBoss Messaging working correctly -->
<attribute name="marshaller" isParam="true">org.jboss.jms.wireformat.JMSWireFormat</attribute>
<attribute name="unmarshaller" isParam="true">org.jboss.jms.wireformat.JMSWireFormat</attribute>
<attribute name="dataType" isParam="true">jms</attribute>
<attribute name="socket.check_connection" isParam="true">false</attribute>
<attribute name="serverBindAddress">${jboss.bind.address}</attribute>
<attribute name="serverBindPort">${jboss.messaging.connector.bisocket.port:4457}</attribute>
<attribute name="clientConnectAddress">${jgroups.bind_addr}</attribute>
<attribute name="clientSocketClass" isParam="true">org.jboss.jms.client.remoting.ClientSocketWrapper</attribute>
<attribute name="serverSocketClass">org.jboss.jms.server.remoting.ServerSocketWrapper</attribute>
<attribute name="onewayThreadPool">org.jboss.jms.server.remoting.DirectThreadPool</attribute>
<!-- the following parameters are useful when there is a firewall between client and server. Uncomment them if so.-->
<attribute name="numberOfCallRetries" isParam="true">2</attribute>
<attribute name="pingFrequency" isParam="true">214748364</attribute>
<attribute name="pingWindowFactor" isParam="true">10</attribute>
<attribute name="generalizeSocketException" isParam="true">true</attribute>
<!-- Now remoting supports socket write timeout configuration. Uncomment this if you need it. -->
<!--
<attribute name="writeTimeout" isParam="true">30000</attribute>
-->
<!-- End immutable parameters -->
<attribute name="stopLeaseOnFailure" isParam="true">true</attribute>
<!-- Periodicity of client pings. Server window by default is twice this figure -->
<attribute name="clientLeasePeriod" isParam="true">25000</attribute>
<attribute name="validatorPingPeriod" isParam="true">20000</attribute>
<attribute name="validatorPingTimeout" isParam="true">15000</attribute>
<attribute name="failureDisconnectTimeout" isParam="true">0</attribute>
<attribute name="callbackErrorsAllowed">2</attribute>
<attribute name="registerCallbackListener">false</attribute>
<attribute name="useClientConnectionIdentity" isParam="true">true</attribute>
<attribute name="timeout" isParam="true">10000</attribute>
<!-- Max Number of connections in client pool. This should be significantly higher than
the max number of sessions/consumers you expect -->
<attribute name="JBM_clientMaxPoolSize" isParam="true">200</attribute>
<!-- The maximum time to wait before timing out on trying to write a message to socket for delivery -->
<attribute name="callbackTimeout">10000</attribute>
<!-- Use these parameters to specify values for binding and connecting control connections to
work with your firewall/NAT configuration -->
<attribute name="secondaryBindPort">4460</attribute>
<attribute name="secondaryConnectPort">4460</attribute>
</invoker>
<handlers>
<handler subsystem="JMS">org.jboss.jms.server.remoting.JMSServerInvocationHandler</handler>
</handlers>
</config>
</attribute>
</mbean>
Thanks!
br
Flemming