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.

Reply via email to