在 Spring AMQP 中处理无法传递给消费者的消息
Handling undeliverable messages to consumers in Spring AMQP
在这种情况下,由于客户端处理不当,消息拒绝将其自身传递给消费者,因此该消息在服务器和客户端之间无限反弹,导致连续的日志消息流填满磁盘 space.
如何避免这种情况?或者换句话说如何限制重试次数?
我尝试使用 rabbit 模板重试模板,但没有成功。请在下面找到配置:
<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>
我参考了这篇文章来解决我的问题:
Handling AMQP messages gracefully with spring-amqp
用rabbit模板重试模板是为了重试发布消息,与消费无关(除非你用的是template.receive()
.
要向侦听器容器添加重试和中止,请参阅the documentation。您需要在侦听器容器的建议链中添加一个重试拦截器;如果您的消息没有消息 ID,则必须使用无状态重试,因为框架需要知道消息重试了多少次,而 amqp 不提供该信息。
请参阅 discussion 了解重试次数耗尽后的处理方法。默认情况下,消息只是被记录和删除,但您可以配置适当的恢复器。 RejectAndDontRequeueRecoverer
将拒绝它并且可以配置 rabbit 将消息发送到死信 exchange/queue。或者您可以使用 RepublishMessageRecoverer
将消息写入另一个队列,包括有关失败的信息。
有关示例,请参阅 。但请注意,使用带有随机消息 ID 的状态恢复将不起作用。
在这种情况下,由于客户端处理不当,消息拒绝将其自身传递给消费者,因此该消息在服务器和客户端之间无限反弹,导致连续的日志消息流填满磁盘 space.
如何避免这种情况?或者换句话说如何限制重试次数?
我尝试使用 rabbit 模板重试模板,但没有成功。请在下面找到配置:
<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>
我参考了这篇文章来解决我的问题: Handling AMQP messages gracefully with spring-amqp
用rabbit模板重试模板是为了重试发布消息,与消费无关(除非你用的是template.receive()
.
要向侦听器容器添加重试和中止,请参阅the documentation。您需要在侦听器容器的建议链中添加一个重试拦截器;如果您的消息没有消息 ID,则必须使用无状态重试,因为框架需要知道消息重试了多少次,而 amqp 不提供该信息。
请参阅 discussion 了解重试次数耗尽后的处理方法。默认情况下,消息只是被记录和删除,但您可以配置适当的恢复器。 RejectAndDontRequeueRecoverer
将拒绝它并且可以配置 rabbit 将消息发送到死信 exchange/queue。或者您可以使用 RepublishMessageRecoverer
将消息写入另一个队列,包括有关失败的信息。
有关示例,请参阅