[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