Hello.

My aim is to be able to have different clusters (JDBC master-slave) running in the same local network. I also want to be able to discover the running nodes from the clients, and so I was using a discoverUri (multicast://default) in the TransportConnector and the proper configuration for the clients. But to be able to isolate the different clusters, I think that I need to use different discoveryUris.

The first question is about the meaning of that uri multicast://default. Is that the same than using:

public static final String DEFAULT_DISCOVERY_URI_STRING="multicast://239.255.2.3:6155";

?

I've also seen that there's a property in the MulticastDiscoveryAgent called group. Its default value is 'default', is that related with the 'default' token in the URI?

I wonder if URIs like multicast://<token> using different tokens for the different clusters should be enough to discriminate them. This is related with the following question:


Looking at the source code, it seems that the multicast code is using the brokerName of the TransportConnector to be able to discriminate different clusters, as the packet payload has something like:

          String payload=getType();
           payload+=started.get()?ALIVE:DEAD;
           payload+=DELIMITER+brokerName+DELIMITER;
           payload+=selfService;

in org.apache.activemq.transport.discovery.multicast.MulticastDiscoveryAgent

But while starting; I get a warning that seems to be written from MulticastDiscoveryAgent.start()

           if (brokerName == null || brokerName.length()==0){
               log.warn("brokerName not set");
           }

Looking a little more in the code, it seems that the brokerName should be set by org.apache.activemq.broker.TransportConnector, before starting the DiscoveryAgent, its start() method says:

       if( da!=null ) {
           da.setBrokerName(getBrokerInfo().getBrokerName());
           da.registerService(getConnectUri().toString());
           da.start();
       }

So, the brokerName is the one in the BrokerInfo private instance of the TransportConnector, that is set using TransportConnector.setBrokername(String brokerName)

This is what I have in the xml configuration file:

<transportConnector brokerName="test" name="default" uri="tcp://localhost:61625" discoveryUri="multicast://224.1.2.3:6255"/>

In the activeMQ log, I see how spring is aware of the brokerName property, and it seems to set it:


[DEBUG][2007-06-06 17:03:13,266][main][org.springframework.beans.CachedIntrospectionResults] Caching PropertyDescriptors for class [org.apache.activemq.broker.TransportConnector]
...

[DEBUG][2007-06-06 17:03:13,267][main][org.springframework.beans.CachedIntrospectionResults] Found bean property 'brokerName' of type [java.lang.String]
...

[DEBUG][2007-06-06 15:37:25,748][main][org.springframework.beans.BeanWrapperImpl] About to invoke write method [public void org.apache.activemq.broker.TransportConnector.setBrokerName(java.lang.String)] on object of class [org.apache.activemq.broker.TransportConnector] [DEBUG][2007-06-06 15:37:25,748][main][org.springframework.beans.BeanWrapperImpl] Invoked write method [public void org.apache.activemq.broker.TransportConnector.setBrokerName(java.lang.String)] with value of type [java.lang.String]

But, anyway, I'm getting multiple warnings like this:


[WARN ][2007-06-06 15:37:27,459][main][org.apache.activemq.transport.discovery.multicast.MulticastDiscoveryAgent] brokerName not set


Perhaps they are from different MulticastDiscoveryAgents than the one bound to the TransportConnector?


So, please. Could you explain or direct me to some information source where I could learn how to write a proper multicast URI, and what is the meaning of its fields?

Thanks a lot.
















Reply via email to