activemq-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From CobraTheSleek <kalic...@yahoo.com>
Subject Re: Messages not being received by consumer
Date Sun, 11 Nov 2007 14:44:24 GMT

I beleive my problem is something related to the Spring support. When I used
the JMSTestClient provided by the Panacya which uses jmsTemplate.receive()
to retreive one message back from the queue, the message was successfully
dequed. I could run that multiple times over to keep dequeing messages.

However, when I use the SpringConsumer onMessage() example, I do not
retrieve a message. On looking at the JMX view, I noticed that the consumer
does appear as a client to the Queue so I eliminated the fact that the test
might be pointing to the wrong queue.

The following is my applicationContext definition, I am using JNDI
connection factory for sending but using the jmsfactory for receiving. I
tried to use the JNDI for both to no success as well.

Any assistance would be greately appreciated. Thanks in advance.

	<bean id="jndiTemplate"
		class="org.springframework.jndi.JndiTemplate">
		<property name="environment">
			<props>
				<prop key="brokerURL">tcp://localhost:61616</prop>

				<prop key="java.naming.factory.initial">
					org.apache.activemq.jndi.ActiveMQInitialContextFactory
				</prop>
				<prop key="queue.requestQueue">
					org.apache.activemq.requestQueue
				</prop>
			</props>
		</property>
	</bean>



	<!--  JNDI Object factory bean for request queue -->
	<bean id="requestQueue"
		class="org.springframework.jndi.JndiObjectFactoryBean">
		<property name="jndiTemplate">
			<ref bean="jndiTemplate" />
		</property>
		<property name="jndiName">
			<value>requestQueue</value>
		</property>
	</bean>


	<bean id="connectionFactory"
		class="org.springframework.jndi.JndiObjectFactoryBean">
		<property name="jndiTemplate">
			<ref bean="jndiTemplate" />
		</property>
		<property name="jndiName">
			<value>ConnectionFactory</value>
		</property>
	</bean>

	<bean id="jmsTemplate"
		class="org.springframework.jms.core.JmsTemplate">
		<property name="connectionFactory">
			<ref bean="connectionFactory" />
		</property>
		<property name="pubSubDomain">
			<value>false</value>
		</property>
	</bean>

	<!-- a sample POJO which uses a Spring JmsTemplate -->

	<bean id="producer" class="com.activemq.test.SpringProducer">
		<property name="template">
			<ref bean="jmsTemplate"></ref>
		</property>

		<property name="messageCount">
			<value>10</value>
		</property>

		<property name="destination">
			<ref bean="echoRequestQueue" />
		</property>
	</bean>


	<bean id="jmsFactory"
		class="org.apache.activemq.pool.PooledConnectionFactory"
		destroy-method="stop">
		<property name="connectionFactory">
			<bean
				class="org.apache.activemq.ActiveMQConnectionFactory">
				<property name="brokerURL">
					<value>tcp://localhost:61616</value>
				</property>
				<property name="userName">
					<value>user</value>
				</property>
				<property name="password">
					<value>password</value>
				</property>
			</bean>
		</property>
	</bean>

	<!-- Spring JMS Template -->
	<bean id="consumerJmsTemplate"
		class="org.springframework.jms.core.JmsTemplate">
		<property name="connectionFactory">
			<ref local="jmsFactory" />
		</property>

	</bean>

	<!-- a sample POJO consumer -->
	<bean id="consumer" class="com.activemq.test.SpringConsumer">
		<property name="template">
			<ref bean="consumerJmsTemplate"></ref>
		</property>

		<property name="destination">
			<ref bean="consumerDestination" />
		</property>
	</bean>

	<bean id="consumerDestination"
		class="org.apache.activemq.command.ActiveMQQueue"
		autowire="constructor" lazy-init="default"
		dependency-check="default">
		<constructor-arg value="org.apache.activemq.replyQueue" />
	</bean>


CobraTheSleek wrote:
> 
> Hi,
> 
> ENV:
> ActiveMQ-Snapshot-5.0
> JBoss AS 4.2.1
> 
> I have the following queues defined:
> 
>  <mbean code="org.jboss.resource.deployment.AdminObject"
> name="activemq.queue:name=org.apache.activemq.requestQueue">
> 	   <attribute name="JNDIName">activemq/requestQueue</attribute>
>       <depends
> optional-attribute-name="RARName">jboss.jca:service=RARDeployment,name='activemq-ra.rar'</depends>
>       <attribute name="Type">javax.jms.Queue</attribute>
>       <attribute
> name="Properties">PhysicalName=org.apache.activemq.requestQueue</attribute>
>    </mbean>
> 
>    <mbean code="org.jboss.resource.deployment.AdminObject"
> name="activemq.queue:name=org.apache.activemq.replyQueue">
> 	   <attribute name="JNDIName">activemq/replyQueue</attribute>
>       <depends
> optional-attribute-name="RARName">jboss.jca:service=RARDeployment,name='activemq-ra.rar'</depends>
>       <attribute name="Type">javax.jms.Queue</attribute>
>       <attribute
> name="Properties">PhysicalName=org.apache.activemq.replyQueue</attribute>
>    </mbean>
> 
> I have an MDB defined that listens for messages from the requestQueue and
> posts a response on the replyQueue.
> 
> I am using the Spring unit tests provided (Producer and Consumer) and my
> Producer sends messages to the requestQueue, the MDB receives the request
> and posts a message back on to the replyQueue.
> 
> I can see that there are messages in the replyQueue via JMX. However, my
> Consumer never receives messages from the replyQueue.
> 
> If I run the test without the MDB, by placing messages in the replyQueue
> via the PRODUCER, my Consumer receives the messages successfully. In other
> words messages posted by the MDB are never received by the consumer. 
> 
> The following is what my MDB does to place messages back on the reply
> queue:
> 
> InitialContext initCtx = new InitialContext();
> 		
> 	QueueConnectionFactory qcf = (QueueConnectionFactory) initCtx
> 		.lookup("java:comp/env/jms/MyQueueConnectionFactory");
> 	
> 	QueueConnection qcon = qcf.createQueueConnection();
> 	QueueSession qsession = qcon.createQueueSession(true, 0);
> 	Queue q = (Queue) initCtx.lookup("activemq/replyQueue");
> 	QueueSender qsender = qsession.createSender(q);
> 	
> 	TextMessage message = qsession.createTextMessage();
> 	
> 	message.setText(response);
> 	qsender.setTimeToLive(100000000);
> 	qsender.send(message);
> 	
> 	qsender.close();
> 	qsession.close();
> 	qcon.close();
> 
> 
> I am quite confused as to why this is happening as I see messages as being
> available in the replyQueue.
> Any tips would be appreciated.
> 

-- 
View this message in context: http://www.nabble.com/Messages-not-being-received-by-consumer-tf4779201s2354.html#a13691974
Sent from the ActiveMQ - User mailing list archive at Nabble.com.


Mime
View raw message