Below is my declarative configuration inside xml file for rabbitmq listener. Retry with advic chain doesnot seem to be happening.DLQMessageRecoverer class is throwing RabbitmqRejectAndDontRequeue exception. It doesnot seem to be calling it either.
<bean id="retryAdvice" class="org.springframework.amqp.rabbit.config.StatefulRetryOperationsInterceptorFactoryBean">
<property name="messageRecoverer" ref="dlqMessageRecoverer"/>
<!--<property name="messageRecoverer" ref="errorMessageRecoverer"/>-->
<property name="retryOperations" ref="retryTemplate" />
</bean>
<bean id="dlqMessageRecoverer" class="com.prosper.phlconsumer.service.error.DLQMessageRecoverer" />
<bean id="retryTemplate" class="org.springframework.retry.support.RetryTemplate">
<property name="backOffPolicy">
<bean class="org.springframework.retry.backoff.ExponentialBackOffPolicy">
<property name="initialInterval" value="500000" />
<property name="maxInterval" value="12000000" />
<property name="multiplier" value="2" />
</bean>
</property>
<property name="retryPolicy">
<bean class="org.springframework.retry.policy.SimpleRetryPolicy">
<property name="maxAttempts" value="2" />
</bean>
</property>
</bean>
<rabbit:listener-container id="messageListenerContainer"
connection-factory="connectionFactory" concurrency="1" acknowledge="auto" advice-chain="retryAdvice" >
<rabbit:listener ref="listingsMessageListener" queue-names="${prosper.listing.phl.queue}" />
<rabbit:listener ref="prospectsMessageListener" queue-names="${prosper.prospect.phl.queue}" />
</rabbit:listener-container>
public class DLQMessageRecoverer implements MessageRecoverer {
@Override public void recover(Message message, Throwable cause) {
message.getMessageProperties()
.setHeader("error",cause.getMessage());
throw new AmqpRejectAndDontRequeueException(cause);
}
}
I think you should set spring.rabbitmq.listener.retry.enabled
property true
. By default RabbitMQ doesn't retry a failed message (assuming fail is on the consumer side).
Also AmqpRejectAndDontRequeueException
is preventing your message from being requeued.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.