Thanks, Joe. Looks like taking out the "duplex=true", while keeping in the random brokerName, solved the issue.
Now, am I right in assuming that random broker names will wreak havoc on durable subscriptions and message recovery? Do most people hand-edit the configuration of each deployed server to give them unique names? On Thu, May 1, 2008 at 2:00 PM, Joe Fernandez < [EMAIL PROTECTED]> wrote: > You can't have both brokers connect to each other with duplex connections. > > Joe > > > > -----Original Message----- > From: matt hoffman [mailto:[EMAIL PROTECTED] > Sent: Thursday, May 01, 2008 1:50 PM > To: users@activemq.apache.org > Subject: Re: Help with embedded brokers > > 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> > > > > > > >