You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@activemq.apache.org by dirful_zone <zd...@i-s.com.cn> on 2009/08/10 10:09:09 UTC
How can consumer monitor the producer via Spring
Hi, this is dirful.
I've study amq for several weeks. I have also searched the forum
carefully.I'm sorry to say that I'm so confused. I didn't get it.:(
This is my problem:
I make a project via Struts FrameWork,Spring and tomcat. I injected JNDI
into "context.xml" of tomcat like this:
<Resource name="jms/ConnectionFactory"
auth="Container"
type="org.apache.activemq.ActiveMQConnectionFactory"
description="JMS Connection Factory"
factory="org.apache.activemq.jndi.JNDIReferenceFactory"
brokerURL="vm://192.168.201.249"
brokerName="LocalActiveMQBroker"/>
<Resource name="jms/Queue1"
auth="Container"
type="org.apache.activemq.command.ActiveMQQueue"
description="my Queue1"
factory="org.apache.activemq.jndi.JNDIReferenceFactory"
physicalName="FOO.BAR"/>
And I rewrited the xml of Spring,too. Then I made a MessageProducer and a
MessageConsumer.
If the MessageProducer and MessageConsumer is in the same apllication(just
call it projectA),It works! Just sending a message, it can real time
receiving the message.In addtion,the receiving method is written in Action.
But now, I wanted if A application sent a message, B application recived it,
and B sent , A recieved. I modified the "context.xml" like this
<Resource name="jms/ConnectionFactory"
auth="Container"
type="org.apache.activemq.ActiveMQConnectionFactory"
description="JMS Connection Factory"
factory="org.apache.activemq.jndi.JNDIReferenceFactory"
brokerURL="vm://192.168.201.249"
brokerName="LocalActiveMQBroker"/>
<Resource name="jms/Queue1"
auth="Container"
type="org.apache.activemq.command.ActiveMQQueue"
description="my Queue1"
factory="org.apache.activemq.jndi.JNDIReferenceFactory"
physicalName="FOO.BAR"/>
<Resource name="jms/Queue2"
auth="Container"
type="org.apache.activemq.command.ActiveMQQueue"
description="my Queue2"
factory="org.apache.activemq.jndi.JNDIReferenceFactory"
physicalName="FOO1.BAR"/>
And this is one of my applictiaonContext.xml,the other one is similar:
<bean id="jmsConnectionFactory"
class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName"
value="java:comp/env/jms/ConnectionFactory"></property>
</bean>
<bean id="jmsQueue1"
class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName"
value="java:comp/env/jms/Queue1"></property>
</bean>
<bean id="jmsQueue2"
class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName"
value="java:comp/env/jms/Queue2"></property>
</bean>
<bean id="jmsTemplate"
class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory"
ref="jmsConnectionFactory"></property>
<property name="defaultDestination" ref="jmsQueue2"></property>
</bean>
<bean id="sender" class="message.Sender">
<property name="jmsTemplate" ref="jmsTemplate"></property>
</bean>
<bean id="receive" class="message.Receiver"></bean>
<bean id="listenerContainer"
class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory"
ref="jmsConnectionFactory"></property>
<property name="destination" ref="jmsQueue1"></property>
<property name="messageListener" ref="receive"></property>
</bean>
I'm depressed. It didn't work very well. When A send a message, B's listener
didn't work.Sometimes, when B send a message, at the same time, it can
recieve the message. But this isn't what I hope.
Could you give me some directions,sir? How can I do monitor the sending
message in two applications?
I have annother question,too.
Er, you see that I injected JNDI into "context.xml", it can send a message
successfully. and I want to make a static Main method In another application
to receive the message( just test). I'm confused that, If I don't use
JNDI,the url is...,the broker is...,password?username? how can I write it?
I made it like this:
connectionFactory = new ActiveMQConnectionFactory(
ActiveMQConnection.DEFAULT_USER,
ActiveMQConnection.DEFAULT_PASSWORD,
"vm://192.168.201.249");
connection = connectionFactory.createConnection();
connection.start();
session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
destination = session.createQueue("FOO.BAR");
consumer = session.createConsumer(destination);
I got a waring:Waiting to Lock the Store activemq-data\192.168.201.249.
I appreciate any your help. Best whishes!
dirful
08/10/2009
--
View this message in context: http://www.nabble.com/How-can-consumer-monitor-the-producer-via-Spring-tp24895824p24895824.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.
Re: How can consumer monitor the producer via Spring
Posted by Dejan Bosanac <de...@nighttale.net>.
Hi,
you're using vm transaport and you can exchange messages using it only
inside the same application (vm). If you want to use this from two
applications, one of them must connect over network. See
http://activemq.apache.org/how-do-i-embed-a-broker-inside-a-connection.htmlfor
more details.
Cheers
--
Dejan Bosanac
Open Source Integration - http://fusesource.com/
ActiveMQ in Action - http://www.manning.com/snyder/
Blog - http://www.nighttale.net
On Mon, Aug 10, 2009 at 10:09 AM, dirful_zone <zd...@i-s.com.cn> wrote:
>
> Hi, this is dirful.
> I've study amq for several weeks. I have also searched the forum
> carefully.I'm sorry to say that I'm so confused. I didn't get it.:(
>
> This is my problem:
> I make a project via Struts FrameWork,Spring and tomcat. I injected JNDI
> into "context.xml" of tomcat like this:
> <Resource name="jms/ConnectionFactory"
> auth="Container"
> type="org.apache.activemq.ActiveMQConnectionFactory"
> description="JMS Connection Factory"
> factory="org.apache.activemq.jndi.JNDIReferenceFactory"
> brokerURL="vm://192.168.201.249"
> brokerName="LocalActiveMQBroker"/>
>
> <Resource name="jms/Queue1"
> auth="Container"
> type="org.apache.activemq.command.ActiveMQQueue"
> description="my Queue1"
> factory="org.apache.activemq.jndi.JNDIReferenceFactory"
> physicalName="FOO.BAR"/>
>
> And I rewrited the xml of Spring,too. Then I made a MessageProducer and a
> MessageConsumer.
> If the MessageProducer and MessageConsumer is in the same apllication(just
> call it projectA),It works! Just sending a message, it can real time
> receiving the message.In addtion,the receiving method is written in Action.
>
> But now, I wanted if A application sent a message, B application recived
> it,
> and B sent , A recieved. I modified the "context.xml" like this
> <Resource name="jms/ConnectionFactory"
> auth="Container"
> type="org.apache.activemq.ActiveMQConnectionFactory"
> description="JMS Connection Factory"
> factory="org.apache.activemq.jndi.JNDIReferenceFactory"
> brokerURL="vm://192.168.201.249"
> brokerName="LocalActiveMQBroker"/>
>
> <Resource name="jms/Queue1"
> auth="Container"
> type="org.apache.activemq.command.ActiveMQQueue"
> description="my Queue1"
> factory="org.apache.activemq.jndi.JNDIReferenceFactory"
> physicalName="FOO.BAR"/>
>
> <Resource name="jms/Queue2"
> auth="Container"
> type="org.apache.activemq.command.ActiveMQQueue"
> description="my Queue2"
> factory="org.apache.activemq.jndi.JNDIReferenceFactory"
> physicalName="FOO1.BAR"/>
>
> And this is one of my applictiaonContext.xml,the other one is similar:
>
> <bean id="jmsConnectionFactory"
> class="org.springframework.jndi.JndiObjectFactoryBean">
> <property name="jndiName"
> value="java:comp/env/jms/ConnectionFactory"></property>
> </bean>
>
> <bean id="jmsQueue1"
> class="org.springframework.jndi.JndiObjectFactoryBean">
> <property name="jndiName"
> value="java:comp/env/jms/Queue1"></property>
> </bean>
> <bean id="jmsQueue2"
> class="org.springframework.jndi.JndiObjectFactoryBean">
> <property name="jndiName"
> value="java:comp/env/jms/Queue2"></property>
> </bean>
>
> <bean id="jmsTemplate"
> class="org.springframework.jms.core.JmsTemplate">
> <property name="connectionFactory"
> ref="jmsConnectionFactory"></property>
> <property name="defaultDestination" ref="jmsQueue2"></property>
> </bean>
>
> <bean id="sender" class="message.Sender">
> <property name="jmsTemplate" ref="jmsTemplate"></property>
> </bean>
>
> <bean id="receive" class="message.Receiver"></bean>
> <bean id="listenerContainer"
>
> class="org.springframework.jms.listener.DefaultMessageListenerContainer">
> <property name="connectionFactory"
> ref="jmsConnectionFactory"></property>
> <property name="destination" ref="jmsQueue1"></property>
> <property name="messageListener" ref="receive"></property>
> </bean>
>
> I'm depressed. It didn't work very well. When A send a message, B's
> listener
> didn't work.Sometimes, when B send a message, at the same time, it can
> recieve the message. But this isn't what I hope.
> Could you give me some directions,sir? How can I do monitor the sending
> message in two applications?
>
> I have annother question,too.
>
> Er, you see that I injected JNDI into "context.xml", it can send a message
> successfully. and I want to make a static Main method In another
> application
> to receive the message( just test). I'm confused that, If I don't use
> JNDI,the url is...,the broker is...,password?username? how can I write it?
> I made it like this:
>
> connectionFactory = new ActiveMQConnectionFactory(
> ActiveMQConnection.DEFAULT_USER,
> ActiveMQConnection.DEFAULT_PASSWORD,
> "vm://192.168.201.249");
> connection = connectionFactory.createConnection();
> connection.start();
> session =
> connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
> destination = session.createQueue("FOO.BAR");
> consumer = session.createConsumer(destination);
>
> I got a waring:Waiting to Lock the Store activemq-data\192.168.201.249.
>
> I appreciate any your help. Best whishes!
>
> dirful
> 08/10/2009
>
> --
> View this message in context:
> http://www.nabble.com/How-can-consumer-monitor-the-producer-via-Spring-tp24895824p24895824.html
> Sent from the ActiveMQ - User mailing list archive at Nabble.com.
>
>