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/java/org/example/RabbitFactoryUtil.java
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.