activemq-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From uma...@comcast.net
Subject RE: Problems with VM transport
Date Tue, 27 Mar 2007 21:17:21 GMT
Suchitha,

Thanks for your help. I thought a URL of the form "tcp://<host>..." refers to
an external broker, not an embedded one? Am I mistaken? 

I need to run the broker within the servlet container VM, not as a 
separate process.

Thanks,

/U

 -------------- Original message ----------------------
From: "Suchitha Koneru (sukoneru)" <sukoneru@cisco.com>
> Hi , 
>       I also have two web apps running in Tomcat 5.5.20.Active mq
> version being used is 4.0.2.
> Our application uses an embedded broker, This broker is started by a
> servlet context Listener, which is specified in web.xml  of one of the
> web apps.  Both the web apps connect to this broker and exchange
> messages. I am using tcp mode of transport tcp://localhost:"+portNum+ ,
> for the broker.
> Both the web apps connect to the broker using the url 
> failover:tcp://localhost:"+this.portNum 
> 
> Make sure that the broker is started by a servlet context listener ,
> which is part of the web app , which is  started  first in order. For
> example , in my case I have two webapps servlets and users,
> Servlets is started before users, so there by the broker is a part of
> servlets web app.
> 
> 
> 
> 
> Hope this helps.
> Thanks,
> Suchitha.
> 
> 
> 
> 
> -----Original Message-----
> From: uma_rk@comcast.net [mailto:uma_rk@comcast.net] 
> Sent: Monday, March 26, 2007 8:31 PM
> To: users@activemq.apache.org
> Subject: Re: Problems with VM transport
> 
> 
> To follow up on my last mail: I can perhaps avoid the problem by using
> distinct brokernames for each webapp; but that would create distinct
> embedded brokers perhaps? I need both the webapps to share the same
> broker so they receive messages published by each other.
> 
> Regards,
> 
> /U
> 
>  -------------- Original message ----------------------
> From: uma_rk@comcast.net
> > 
> > Hi -
> > 
> >    I am using the embedded broker in a servlet container. Each webapp 
> > in the servlet container instantiates a connection factory that refers
> 
> > to broker URL of
> > 
> >             vm://localhost?broker.persistent=false
> > 
> > as follows:
> > 
> >         (Servlet Container
> >                  (WebApp1
> >                        ConnectionFactory -> 
> > vm://localhost?broker.persistent=false
> >                  )
> >         )
> > 
> > and this works fine. But as soon as I instantiate another webapp 
> > (WebApp2) that also uses embedded broker as follows:
> > 
> >         (Servlet Container
> >                  (WebApp1
> >                        ConnectionFactory -> 
> > vm://localhost?broker.persistent=false
> >                  )
> >                  (WebApp2
> >                        ConnectionFactory -> 
> > vm://localhost?broker.persistent=false
> >                  )
> >         )
> > 
> > the second webapp fails with the JMSException given below:
> > 
> >    javax.jms.JMSException: Could not create Transport. Reason: 
> > javax.management.InstanceAlreadyExistsException: 
> > org.apache.activemq:BrokerName=localhost,Type=Broker
> >         at
> >
> org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.
> java:33)
> >         at
> > org.apache.activemq.ActiveMQConnectionFactory.createTransport(ActiveMQ
> > Connection
> > Factory.java:229)
> >         at
> > org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnection
> > (ActiveMQC
> > onnectionFactory.java:242)
> >         at
> > org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnection
> > (ActiveMQC
> > onnectionFactory.java:211)
> >         at
> > org.apache.activemq.ActiveMQConnectionFactory.createConnection(ActiveM
> > QConnectio
> > nFactory.java:158)
> >         at
> > org.springframework.jms.listener.AbstractMessageListenerContainer.crea
> > teConnecti
> > on(AbstractMessageListenerContainer.java:989)
> >         at
> > org.springframework.jms.listener.AbstractMessageListenerContainer.refr
> > eshSharedC
> > onnection(AbstractMessageListenerContainer.java:455)
> >         //...
> > 
> > 
> > I thought I could (tentatively) work around this problem by disabling 
> > Jmx, so I switched the broker URL (for both webapps) to
> > 
> >           vm://localhost?broker.persistent=false&useJmx=false
> > 
> > This did not help.  Is there fundamentally a problem with multiple 
> > instances of ActiveMQConnectionFactory referring to the same broker 
> > URL (which is likely to to be the case when using embedded broker)?
> > 
> > Thanks,
> > 
> > /U
> > 
> > 
> >  -------------- Original message ----------------------
> > From: Adrian Co <aco@exist.com>
> > > uma_rk@comcast.net wrote:
> > > > Adrian,
> > > >
> > > > Thanks for the note. 
> > > >
> > > >       > >    Startup:   vm://localhost
> > > >       > >    During runtime (after an event): 
> > > >       > >            failover(vm://localhost,tcp://remote:61616)
> > > >       > >
> > > >       > >   Would modifying the broker URL of the connection
> factory cause 
> > > problems?
> > > >        > >   
> > > >         > Personally, I'm not sure if you can I haven't tried it, 
> > > > but I
> > don't
> > > >         > think it makes sense to make a vm transport failover. 
> > > > The
> > assumption
> > > is
> > > >         > that you have a broker running in the same vm as your
> jms client. 
> > If
> > > the
> > > >         > broker crashes, it means your client *should* have 
> > > > crashed also
> > and
> > > it
> > > >         > can't failover over to a remote broker anymore.
> > > >
> > > > Makes sense - now I see why someone else referred to me as
> 'retard' :-).
> > > >  I need to have the client listen to two different brokers (the 
> > > > embedded and the external) at the same time (so that the client 
> > > > receives messages
> > > published
> > > > by both the brokers and the messages published by the client are 
> > > > sent to
> > both
> > > the
> > > > brokers).  Is this the correct URI to network the embedded broker 
> > > > with an
> > > external broker?
> > > >
> > > >             static:(vm://localhost,tcp://remotehost:61616)
> > > >   
> > > Hum. AFAIK,  static just tells the client to choose one url to 
> > > connect to. I don't think you can listen to two or more brokers 
> > > using a single connection. You might want to network the brokers 
> > > together if thats possible. If someone can let me know if its 
> > > possible to listen to more than two brokers using a single jms 
> > > connection, I'd appreciate it also. :-)
> > > >
> > > > Could you also clarify an additional question? If I instantiate 
> > > > multiple connection factories in the same VM pointing to the 
> > > > embedded broker would all the cconnection factories in the VM 
> > > > share the same broker (as opposed to attempting to "instantiating 
> > > > a new embedded broker" if such a thing were possible)?
> > > >   
> > > If they are in the same jvm, and there's already an embedded broker,
> 
> > > it will be reused.
> > > > Thanks again,
> > > >
> > > > /U
> > > >
> > > >  
> > > 
> > 


Mime
View raw message