[rabbitmq-discuss] Retry Message for 3 times with 10 seconds interval - in Consumer
Srinath Sridharan -X (srinatsr - ZENSAR TECHNOLOGIES INC at Cisco)
srinatsr at cisco.com
Wed May 21 19:14:04 BST 2014
After 3 times, I am getting the following exception. But I don’t want this exception, directly the message should go to dead letter exchange.
I have configured dlx as follows.
rabbitmqctl set_policy DLX ".*" '{"dead-letter-exchange":"my-dlx"}'
2014-05-21 11:10:37:870 -0700, [WARN] StatefulRetryOperationsInterceptorFactoryBean recover - 89 Message dropped on recovery: (Body:'[B at 3ed60d48(byte[163])'MessageProperties [headers={}, timestamp=null, messageId=1, userId=null, appId=null, clusterId=null, type=null, correlationId=null, replyTo=null, contentType=application/octet-stream, contentEncoding=null, contentLength=0, deliveryMode=PERSISTENT, expiration=null, priority=0, redelivered=true, receivedExchange=, receivedRoutingKey=validateRequestQueue, deliveryTag=8, messageCount=0])
org.springframework.amqp.rabbit.listener.ListenerExecutionFailedException: Listener threw exception
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.wrapToListenerExecutionFailedExceptionIfNeeded(AbstractMessageListenerContainer.java:758)
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:653)
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:576)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.access$001(SimpleMessageListenerContainer.java:75)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$1.invokeListener(SimpleMessageListenerContainer.java:154)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
at org.springframework.retry.interceptor.StatefulRetryOperationsInterceptor$MethodInvocationRetryCallback.doWithRetry(StatefulRetryOperationsInterceptor.java:162)
at org.springframework.retry.support.RetryTemplate.doExecute(RetryTemplate.java:263)
at org.springframework.retry.support.RetryTemplate.execute(RetryTemplate.java:193)
at org.springframework.retry.interceptor.StatefulRetryOperationsInterceptor.invoke(StatefulRetryOperationsInterceptor.java:137)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at com.sun.proxy.$Proxy62.invokeListener(Unknown Source)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.invokeListener(SimpleMessageListenerContainer.java:1113)
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.executeListener(AbstractMessageListenerContainer.java:559)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.doReceiveAndExecute(SimpleMessageListenerContainer.java:904)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.receiveAndExecute(SimpleMessageListenerContainer.java:888)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.access$500(SimpleMessageListenerContainer.java:75)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.run(SimpleMessageListenerContainer.java:989)
at java.lang.Thread.run(Thread.java:724)
Regards …•
Srinath
From: rabbitmq-discuss [mailto:rabbitmq-discuss-bounces at lists.rabbitmq.com] On Behalf Of Srinath Sridharan -X (srinatsr - ZENSAR TECHNOLOGIES INC at Cisco)
Sent: Wednesday, May 21, 2014 11:00 AM
To: Discussions about RabbitMQ
Subject: Re: [rabbitmq-discuss] Retry Message for 3 times with 10 seconds interval - in Consumer
It works perfect thank you so much ☺
Regards …•
Srinath
From: rabbitmq-discuss [mailto:rabbitmq-discuss-bounces at lists.rabbitmq.com] On Behalf Of Gary Russell
Sent: Tuesday, May 20, 2014 12:48 PM
To: Discussions about RabbitMQ
Subject: Re: [rabbitmq-discuss] Retry Message for 3 times with 10 seconds interval - in Consumer
To configure the retry advice in XML, you need to wire up a StatefulRetryOperationsInterceptorFactoryBean.
It needs a RetryTemplate (RetryOperations) bean which needs a RetryPolicy and BackOffPolicy beans.
Then wire the factory bean into the advice chain.
To set the message id, it depends on how you are sending messages; you can set it directly, or if you are using message conversion, set the createMessageIds to true on the outbound template's SimpleMessageConverter.
However, when using long backoffs like that, there's not much benefit in using stateful retry.
On Tue, May 20, 2014 at 3:29 PM, Srinath Sridharan -X (srinatsr - ZENSAR TECHNOLOGIES INC at Cisco) <srinatsr at cisco.com<mailto:srinatsr at cisco.com>> wrote:
Thanks do you have xml version of the following?
I need to set message id before publishing the message? How to do this?
Regards …•
Srinath
From: rabbitmq-discuss [mailto:rabbitmq-discuss-bounces at lists.rabbitmq.com<mailto:rabbitmq-discuss-bounces at lists.rabbitmq.com>] On Behalf Of Gary Russell
Sent: Tuesday, May 20, 2014 12:24 PM
To: Discussions about RabbitMQ
Subject: Re: [rabbitmq-discuss] Retry Message for 3 times with 10 seconds interval - in Consumer
@Bean
public MethodInterceptor retryAdvice() {
FixedBackOffPolicy backOffPolicy = new FixedBackOffPolicy();
backOffPolicy.setBackOffPeriod(10000);;
return RetryInterceptorBuilder.stateful()
.backOffPolicy(backOffPolicy)
.maxAttempts(3)
.recoverer(new RejectAndDontRequeueRecoverer())
.build();
}
Add it to the adviceChain property of the SimpleMessageListenerContainer.
Note: stateful retry requires the message to have a message id; use a stateless advice otherwise.
After the retries are exhausted, the message will be rejected (and dropped or sent to a Dead Letter Exchange of so configured).
On Tue, May 20, 2014 at 3:09 PM, Srinath Sridharan -X (srinatsr - ZENSAR TECHNOLOGIES INC at Cisco) <srinatsr at cisco.com<mailto:srinatsr at cisco.com>> wrote:
Hello,
I am consuming the messages using the listener as follows, I need to retry processing three times if any exceptions occurred.
<bean
class="org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer">
<property name="connectionFactory" ref="connectionFactory" />
<property name="queueNames">
<array>
<value>validateRequestQueue</value>
</array>
</property>
<property name="messageListener">
<bean
class="org.springframework.amqp.rabbit.listener.adapter.MessageListenerAdapter">
<property name="delegate" ref="retryConsumer" />
</bean>
</property>
<!-- <property name="acknowledgeMode" value="NONE" /> -->
</bean>
public class RetryConsumer implements ChannelAwareMessageListener {
/**
* Callback for processing a received Rabbit message.
* @param message the received AMQP message
* @param channel the underlying Rabbit Channel
* @throws Exception
*/
@Override
public void onMessage(Message message, Channel channel) throws Exception {
System.out.println("Received Message :: "+new String(message.getBody()));
if(true){
throw new RuntimeException("Error");
}
}
Regards …•
Srinath
From: Srinath Sridharan -X (srinatsr - ZENSAR TECHNOLOGIES INC at Cisco)
Sent: Monday, May 19, 2014 10:47 AM
To: rabbitmq-discuss at lists.rabbitmq.com<mailto:rabbitmq-discuss at lists.rabbitmq.com>
Subject: Retry Message for 3 times with 10 seconds interval - in Consumer
Retry unacknowledged RabbitMQ message in 10 second interval
And Retry 3 times using Spring framework in java .
Please need help on this
Regards …•
Srinath
_______________________________________________
rabbitmq-discuss mailing list
rabbitmq-discuss at lists.rabbitmq.com<mailto:rabbitmq-discuss at lists.rabbitmq.com>
https://lists.rabbitmq.com/cgi-bin/mailman/listinfo/rabbitmq-discuss
_______________________________________________
rabbitmq-discuss mailing list
rabbitmq-discuss at lists.rabbitmq.com<mailto:rabbitmq-discuss at lists.rabbitmq.com>
https://lists.rabbitmq.com/cgi-bin/mailman/listinfo/rabbitmq-discuss
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rabbitmq.com/pipermail/rabbitmq-discuss/attachments/20140521/eaab88fa/attachment.html>
More information about the rabbitmq-discuss
mailing list