Multicast transport does not work when for a consumer or producer
-----------------------------------------------------------------
Key: AMQ-2134
URL: https://issues.apache.org/activemq/browse/AMQ-2134
Project: ActiveMQ
Issue Type: Bug
Components: Broker
Affects Versions: 5.2.0
Environment: Using JMS in a spring framework
Reporter: Jaiganesh Mathaiyan
Priority: Critical
Fix For: 5.3.0
I am creating a broker with just a multicast transport connector. Code snippet
below.
try{
broker = new BrokerService();
// configure the broker
broker.setBrokerName("ism");
broker.addConnector("multicast://224.1.2.3:6255?loopBackMode=true");
broker.start();
}catch(Exception ex){
ex.printStackTrace();
}
Now I try creating a subscriber on the broker using the following broker url
"multicast://224.1.2.3:6255?loopBackMode=true&trace=true"
The connection never succeeds and the following message is repeatedly thrown.
DEBUG o.a.a.t.reliable.ReliableTransport - Still waiting for response on:
multicast://224.1.2.3:6255?loopBackMode=true&trace=t...@0 to command:
ConnectionInfo {commandId = 1, responseRequired = true, connectionId =
ID:JMATHAIY-WXP01-3697-1235159811727-2:0, clientId =
ID:JMATHAIY-WXP01-3697-1235159811727-3:0, userName = null, password = null,
brokerPath = null, brokerMasterConnector = false, manageable = true,
clientMaster = true} sending replay message
11:58:44.270 [http-8080-1] DEBUG o.a.a.t.TransportLogger.Connection:1 -
SENDING: ReplayCommand {commandId = 25, firstNakNumber = 1, lastNakNumber = 1}
The reason to believe why this is a bug:
I did some sniffing on the network and found that the igmp multicast join
request for the broker never came through. Some digging into the code revealed
that the MulticastTransport was never created in the first place. UdpTransport
was being created even though the transport was multicast. The following change
in the doBind method on the UdpTransportFactory.java fixed this problem.
//int port = location.getPort();
//OpenWireFormat openWireFormat = asOpenWireFormat(wf);
//UdpTransport transport = new UdpTransport(openWireFormat, port);
log.debug("Putting a custom fix for Multicast problem");
UdpTransport transport = (UdpTransport)createTransport(location,
wf);
Now I was able to see the broker joining the multicast group, but the multicast
socket gets timed out after every 5000 ms . I figured out that this is a
default setting in the MulticastTransport.java (DEFAULT_IDLE_TIME) and tried
changing it to 0 (open socket forever). Note : There is no way to specify this
value from the uri. (or I was not able to figure that out).
After the above two changes, I could get publisher and consumer connect to the
broker and pass on the messages.
Please review the above changes and let me know if this has any other side
effects or if any better fix is possible.
Background : We are actively testing out the various transports to use ActiveMQ
in our application and multicast is very essential. Infact we want to integrate
jgroups and I am not having any success there. Is jgroups really integrated in
5.2 ?
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.