在Spring AMQP中向消费者处理无法传递的消息

在这种情况下,由于客户端的不正确处理,消息拒绝将消息传递给消费者,因此此消息在服务器和客户端之间无限次地反弹,导致连续的日志消息流填满磁盘空间。

如何避免这种情况? 或换句话说,如何限制重试次数有限?

我试着用兔子模板重试模板,但没有成功。 请找到下面的配置:

<rabbit:template id="rabbitTemplate" connection-factory="connectionFactory" reply-timeout="10" retry-template="retryTemplate"/>

<bean id="retryTemplate" class="org.springframework.retry.support.RetryTemplate">
<property name="backOffPolicy">
    <bean class="org.springframework.retry.backoff.ExponentialBackOffPolicy">
        <property name="initialInterval" value="500" />
        <property name="multiplier" value="10.0" />
        <property name="maxInterval" value="10000" />
    </bean>
</property>
</bean>

我将这篇文章引用到我的问题中:使用spring-amqp优雅地处理AMQP消息


对兔子模板使用重试模板是为了重试发布消息,并且与消费无关(除非使用template.receive()

要向侦听器容器添加重试和中止,请参阅文档。 您需要向侦听器容器的建议链添加一个重试拦截器; 如果您的消息没有消息ID,则必须使用无状态重试,因为该框架需要知道消息已重试了多少次,而且amqp不提供该信息。

请参阅有关重试耗尽时要执行的操作的讨论。 默认情况下,该消息只是记录下来,但您可以配置适当的恢复程序。 RejectAndDontRequeueRecoverer将拒绝它,并且可以将rabbit配置为将消息发送到死信交换/队列。 或者您可以使用RepublishMessageRecoverer将消息写入另一个队列,包括有关失败的信息。

查看这个问题/答案的例子。 但请注意,使用带有随机消息ID的状态恢复将不起作用。

链接地址: http://www.djcxy.com/p/59649.html

上一篇: Handling undeliverable messages to consumers in Spring AMQP

下一篇: How to receive messages for a correlationid from RabbitMQ using Spring AMQP