Ok, I gave that a shot.  I set the broker name to a randomly-generated UUID
(which has implications for durable subscriptions and data recovery should a
broker go down, I imagine, but it's for the sake of testing).   I still got
errors, so I set the network connector name to the same value.  It made the
error a lot messier to look at, but it's actually the same error:

In this case, I started broker "be052f4d-5d66-4b61-bfb0-a298f72f8a27" first,
then broker "81ca000d-ad12-4afe-9f94-733930ff7d54".   Here's the error that
was displayed on the second broker's side:

javax.jms.InvalidClientIDException: Broker:
81ca000d-ad12-4afe-9f94-733930ff7d54 - Client:
NC_be052f4d-5d66-4b61-bfb0-a298f72f8a27_outbound already connected from
vm://81ca000d-ad12-4afe-9f94-733930ff7d54#0

The error on the first broker's side is similar, but with the broker names
reversed:

javax.jms.InvalidClientIDException: Broker:
be052f4d-5d66-4b61-bfb0-a298f72f8a27 - Client:
NC_81ca000d-ad12-4afe-9f94-733930ff7d54_outbound already connected from
vm://be052f4d-5d66-4b61-bfb0-a298f72f8a27#2

Surely, I must be doing something wrong here?


On Thu, May 1, 2008 at 1:09 PM, Dejan Bosanac <[EMAIL PROTECTED]> wrote:

> Hi,
>
> you can try specifying different name for every broker. It should help.
>
> Regards
> --
> Dejan Bosanac
> www.scriptinginjava.net
> On Thu, May 1, 2008 at 5:29 PM, matt hoffman <[EMAIL PROTECTED]> wrote:
>
> > I'm having a lot of trouble getting embedded brokers to work as they
> > should.  I'm using them in my case mainly to ease configuration -- I
> want
> > to
> > be able to run several instances of the same code and have them discover
> > each other and communicate, without needing a single server already
> > running.
> >
> >
> > The current problem is, the first server starts up great, and works as
> > expected.  Subsequent servers, though, throw this error:
> >
> > javax.jms.InvalidClientIDException: Broker: localhost - Client:
> > NC_localhost_inboundlocalhost already connected from vm://localhost#0
> >
> > Which seems strange, seeing as how I'm not explicitly setting clientID
> > anywhere.  I thought these were auto-generated?
> >
> > Below is the configuration I'm currently using.  I'm not referencing the
> > broker in code at all; I'm interacting with it only through the Spring
> > JmsTemplate, which in turn gets a connection from the
> > ActiveMQConnectionFactory connecting to vm://localhost.  Based on the
> > documentation, that seems to be the way to do it... what have I
> > misunderstood?
> >
> >
> > In my Spring config:
> >
> >    <bean id="broker"
> class="org.apache.activemq.xbean.BrokerFactoryBean">
> >        <property name="config" value="classpath:activemq.xml" />
> >        <property name="start" value="true" />
> >    </bean>
> >
> >    <bean id="workQueueDestination"
> > class="org.apache.activemq.command.ActiveMQQueue">
> >        <constructor-arg index="0" value="Test.WorkQueue"/>
> >    </bean>
> >
> >    <bean id="eventTopicDestination"
> > class="org.apache.activemq.command.ActiveMQTopic">
> >        <constructor-arg index="0" value="Test.EventTopic"/>
> >    </bean>
> >
> >    <bean id="jmsFactory"
> > class="org.apache.activemq.ActiveMQConnectionFactory"
> depends-on="broker">
> >        <property name="brokerURL" value="vm://localhost"/>
> >    </bean>
> >
> >    <bean id="workQueueJmsTemplate"
> > class="org.springframework.jms.core.JmsTemplate">
> >        <property name="connectionFactory">
> >            <!-- wrapping in a pool to avoid creating a connection per
> send
> > -->
> >            <bean
> > class="org.springframework.jms.connection.CachingConnectionFactory">
> >                <property name="targetConnectionFactory">
> >                    <ref local="jmsFactory"/>
> >                </property>
> >            </bean>
> >        </property>
> >
> >        <property name="defaultDestination" ref="workQueueDestination"/>
> >    </bean>
> >
> > I previously tried including the broker config directly in the Spring
> > file,
> > but broke it out as a problem-solving exercise and haven't moved it back
> > yet.
> > Here's the referenced activemq.xml:
> >
> >
> > <beans xmlns="http://www.springframework.org/schema/beans";
> >       xmlns:jms="http://activemq.org/config/1.0";
> >       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
> >       xsi:schemaLocation="http://www.springframework.org/schema/beans
> > http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
> >  http://activemq.org/config/1.0
> > http://activemq.apache.org/schema/core/activemq-core-5.0.0.xsd";
> >       default-lazy-init="false">
> >
> >    <jms:broker id="broker" persistent="false" useJmx="true">
> >        <jms:networkConnectors>
> >            <jms:networkConnector uri="multicast://default"
> duplex="true"/>
> >            <!-- by default just auto discover the other brokers -->
> >        </jms:networkConnectors>
> >
> >        <jms:persistenceAdapter>
> >            <jms:memoryPersistenceAdapter/>
> >        </jms:persistenceAdapter>
> >
> >        <jms:transportConnectors>
> >            <jms:transportConnector name="openwire"
> uri="tcp://localhost:0"
> > discoveryUri="multicast://default"/>
> >        </jms:transportConnectors>
> >
> >    </jms:broker>
> >
> > </beans>
> >
>

Reply via email to