Hi James,

Thanks for the reply. I have been gone through the github samples that
you forwarded and had in fact used the ConnectionFactory class from
there.

I fixed the problem with the Spring Configuration and things are
working quite well.

And the culprit was the following line in the spring config xml:

<rabbit:queue id="sample-queue"/>

I just added the "name" attribute also to this as follows:

<rabbit:queue id="sample-queue" name="sample-queue"/>

This made everyone happy. I guess I got the hint from the Heroku logs,
which complained that the Queue with the name was not found. I suspect
that internally, when it wants to start the listener, it is looking up
the queue-name referenced by the listener in the configuration and is
not able to look it up.

I am not too sure, but do you think it is fair to change the
implementation (maybe in an incremental release) that makes the id and
the name similar , in case the name attribute is not specified in the
<rabbit:queue> configuration?

Best Regards,
Romin

On Apr 17, 2:45 am, James Ward <[email protected]> wrote:
> I don't have an example that uses Spring Config for this, but I have a
> plain Java one:https://github.com/jamesward/javasample-rabbitmq
>
> The connection setup is 
> here:https://github.com/jamesward/javasample-rabbitmq/blob/master/src/main...
>
> Let me know if that helps.
>
> -James
>
> On 04/16/2012 11:46 AM, Romin Irani wrote:
>
>
>
>
>
>
>
> > I am trying to configure Spring MVC&  RabbitMQ in Java.
>
> > I have the following Configuration File (servlet-context.xml).
>
> > <?xml version="1.0" encoding="UTF-8"?>
> > <beans xmlns="http://www.springframework.org/schema/beans";
> >    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
> >    xmlns:mvc="http://www.springframework.org/schema/mvc";
> >    xmlns:context="http://www.springframework.org/schema/context";
> >    xmlns:rabbit="http://www.springframework.org/schema/rabbit";
> >    xsi:schemaLocation="http://www.springframework.org/schema/mvc
> >http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
> >            http://www.springframework.org/schema/beans
> >http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
> >            http://www.springframework.org/schema/context
> >http://www.springframework.org/schema/context/spring-context-3.0.xsd
> >            http://www.springframework.org/schema/rabbit
> >http://www.springframework.org/schema/rabbit/spring-rabbit-1.0.xsd";
> > default-autowire="byName">
>
> >    <context:component-scan base-package="com.appirio.messaginghub"/>
>
> >    <mvc:annotation-driven/>
>
> >    <mvc:resources location="file:./src/main/resources/static/,classpath:/
> > static/" mapping="static/**"/>
>
> >    <context:property-placeholder/>
>
> >    <bean id="rabbitConnectionFactory"
> > class="org.springframework.amqp.rabbit.connection.CachingConnectionFactory" 
> > >
> >          <!-- This constructor arg utilizes the RabbitFactoryUtil class
> > shown in the java example above -->
> >          <constructor-
> > arg><value>#{ 
> > T(com.appirio.messaginghub.RabbitFactoryUtil).getConnectionFactory()}
> > </value></constructor-arg>
> >      </bean>
>
> >      <bean id="mylistener"
> > class="com.appirio.messaginghub.MyMessageListener"/>
>
> >      <rabbit:queue id="sample-queue"/>
>
> >      <rabbit:fanout-exchange name="sample-exchange">
> >          <rabbit:bindings>
> >              <rabbit:binding queue="sample-queue"/>
> >          </rabbit:bindings>
> >      </rabbit:fanout-exchange>
>
> >      <rabbit:admin connection-factory="rabbitConnectionFactory"/>
> >      <rabbit:listener-container>
> >            <rabbit:listener queues="sample-queue" ref="mylistener"/>
> >    </rabbit:listener-container>
>
> >      <bean id="template"
> > class="org.springframework.amqp.rabbit.core.RabbitTemplate">
> >          <property name="connectionFactory"
> > ref="rabbitConnectionFactory"/>
> >          <property name="exchange" value="sample-exchange"/>
> >          <property name="queue" value="sample-queue"/>
> >          <property name="routingKey" value="sample-key"/>
> >      </bean>
>
> > </beans>
>
> > I am able to post a message successfully to RabbitMQ in my controller
> > via this code:
>
> > ClassPathXmlApplicationContext ctx = new
> > ClassPathXmlApplicationContext("**/servlet-context.xml");
> > RabbitTemplate rabbitTemplate = ctx.getBean(RabbitTemplate.class);
> > rabbitTemplate.send(new Message("sample message".getBytes("UTF-8"),
> > new MessageProperties()));
>
> > I have written a listener class as shown below:
>
> > package com.appirio.messaginghub;
>
> > import org.apache.log4j.Logger;
> > import org.springframework.amqp.core.Message;
> > import org.springframework.amqp.core.MessageListener;
>
> > public class MyMessageListener implements MessageListener {
>
> >    @Override
> >    public void onMessage(Message message) {
> >            Logger barlogger = Logger.getLogger("someclass");
> >            barlogger.info("onMessage is invoked");
> >    }
> > }
>
> > And this class is referenced correctly in the servlet-context.xml
> > Spring configuration file.
>
> > ISSUE : The Listener is never getting called.
>
> > Any hints on what I might be doing wrong.
>
> > I see the following error log via heroku logs:
>
> > 2012-04-16T17:44:23+00:00 app[web.1]:
> > org.springframework.amqp.rabbit.listener.F
> > atalListenerStartupException: Cannot prepare queue for listener.
> > Either the queu
> > e doesn't exist or the broker will not allow us to use it.
> > 2012-04-16T17:44:23+00:00 app[web.1]: Caused by: java.io.IOException
> > 2012-04-16T17:44:23+00:00 app[web.1]:   at
> > com.rabbitmq.client.impl.AMQChannel.w
> > rap(AMQChannel.java:102)
> > 2012-04-16T17:44:23+00:00 app[web.1]:   at
> > com.rabbitmq.client.impl.AMQChannel.e
> > xnWrappingRpc(AMQChannel.java:126)
> > 2012-04-16T17:44:23+00:00 app[web.1]:   at
> > com.rabbitmq.client.impl.ChannelN.que
> > ueDeclarePassive(ChannelN.java:717)
> > 2012-04-16T17:44:23+00:00 app[web.1]:   at
> > sun.reflect.NativeMethodAccessorImpl.
> > invoke0(Native Method)
> > 2012-04-16T17:44:23+00:00 app[web.1]:   at
> > java.lang.reflect.Method.invoke(Metho
> > d.java:616)
> > 2012-04-16T17:44:23+00:00 app[web.1]:   at
> > org.springframework.amqp.rabbit.conne
> > ction.CachingConnectionFactory
> > $CachedChannelInvocationHandler.invoke(CachingConn
> > ectionFactory.java:298)
> > 2012-04-16T17:44:23+00:00 app[web.1]:   at
> > org.springframework.amqp.rabbit.liste
> > ner.BlockingQueueConsumer.start(BlockingQueueConsumer.java:188)
> > 2012-04-16T17:44:23+00:00 app[web.1]:   at
> > $Proxy12.queueDeclarePassive(Unknown
> > Source)
> > 2012-04-16T17:44:23+00:00 app[web.1]:   ... 2 more
> > 2012-04-16T17:44:23+00:00 app[web.1]:   at
> > com.rabbitmq.utility.ValueOrException
> > .getValue(ValueOrException.java:67)
> > 2012-04-16T17:44:23+00:00 app[web.1]:   at
> > com.rabbitmq.client.impl.AMQChannel.p
> > rivateRpc(AMQChannel.java:214)
> > 2012-04-16T17:44:23+00:00 app[web.1]:   at
> > com.rabbitmq.client.impl.AMQChannel.e
> > xnWrappingRpc(AMQChannel.java:120)
> > 2012-04-16T17:44:23+00:00 app[web.1]:   ... 11 more
> > 2012-04-16T17:44:23+00:00 app[web.1]: Caused by:
> > com.rabbitmq.client.ShutdownSig
> > nalException: channel error; reason: {#method<channel.close>(reply-
> > code=404, rep
> > ly-text=NOT_FOUND - no queue '7de7b588-49cb-45db-8a06-4ae239898707' in
> > vhost 'ig
> > deesju', class-id=50, method-id=10), null, "[B@1fbbc779"}
> > 2012-04-16T17:44:23+00:00 app[web.1]:   at
> > com.rabbitmq.client.impl.ChannelN.pro
> > cessAsync(ChannelN.java:263)
> > 2012-04-16T17:44:23+00:00 app[web.1]: WARN :
> > org.springframework.amqp.rabbit.lis
> > tener.SimpleMessageListenerContainer - Consumer raised exception,
> > processing can
> >   restart if the connection factory supports it. Exception summary:
> > org.springfra
> > mework.amqp.AmqpIOException: java.io.IOException
> > 2012-04-16T17:44:23+00:00 app[web.1]: ERROR:
> > org.springframework.amqp.rabbit.lis
> > tener.SimpleMessageListenerContainer - Consumer received fatal
> > exception on star
> > tup
> > 2012-04-16T17:44:23+00:00 app[web.1]:   at
> > com.rabbitmq.client.impl.ChannelN.que
> > ueDeclarePassive(ChannelN.java:61)
> > 2012-04-16T17:44:23+00:00 app[web.1]: Caused by:
> > com.rabbitmq.client.ShutdownSig
> > nalException: channel error; reason: {#method<channel.close>(reply-
> > code=404, rep
> > ly-text=NOT_FOUND - no queue '7de7b588-49cb-45db-8a06-4ae239898707' in
> > vhost 'ig
> > deesju', class-id=50, method-id=10), null, "[B@1fbbc779"}
> > 2012-04-16T17:44:23+00:00 app[web.1]:   at
> > org.springframework.amqp.rabbit.liste
> > ner.SimpleMessageListenerContainer
> > $AsyncMessageProcessingConsumer.run(SimpleMess
> > ageListenerContainer.java:489)
> > 2012-04-16T17:44:23+00:00 app[web.1]:   at
> > com.rabbitmq.client.impl.ChannelN.asy
> > ncShutdown(ChannelN.java:423)
> > 2012-04-16T17:44:23+00:00 app[web.1]:   at
> > org.springframework.amqp.rabbit.liste
> > ner.BlockingQueueConsumer.start(BlockingQueueConsumer.java:192)
> > 2012-04-16T17:44:23+00:00 app[web.1]:   at
> > sun.reflect.NativeMethodAccessorImpl.
> > invoke(NativeMethodAccessorImpl.java:57)
> > 2012-04-16T17:44:23+00:00 app[web.1]:   at
> > com.rabbitmq.utility.BlockingValueOrE
> > xception.uninterruptibleGetValue(BlockingValueOrException.java:33)
> > 2012-04-16T17:44:23+00:00 app[web.1]:   at
> > com.rabbitmq.client.impl.AMQChannel.h
> > andleCompleteInboundCommand(AMQChannel.java:146)
> > 2012-04-16T17:44:23+00:00 app[web.1]:   at
> > java.lang.Thread.run(Thread.java:636)
>
> > 2012-04-16T17:44:23+00:00 app[web.1]:   at
> > sun.reflect.DelegatingMethodAccessorI
> > mpl.invoke(DelegatingMethodAccessorImpl.java:43)
> > 2012-04-16T17:44:23+00:00 app[web.1]:   at
> > com.rabbitmq.client.impl.AMQChannel$B
> > lockingRpcContinuation.getReply(AMQChannel.java:341)
> > 2012-04-16T17:44:23+00:00 app[web.1]:   at
> > com.rabbitmq.client.impl.AMQConnectio
> > n$MainLoop.run(AMQConnection.java:482)
> > 2012-04-16T17:44:23+00:00 app[web.1]:   at
> > com.rabbitmq.client.impl.AMQChannel.h
> > andleFrame(AMQChannel.java:91)

-- 
You received this message because you are subscribed to the Google Groups 
"Heroku" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/heroku?hl=en.

Reply via email to