当使用者在处理消息期间且在手动确认起作用之前引发异常republishToDlq时,但原始队列消息始终处于nack状态。
[Spring Boot
:2.1.11.RELEASE
[Spring Cloud
:Greenwich.SR4
[Spring Cloud Stream
:Fishtown.SR4
[spring-cloud-stream-binder-rabbit
:2.1.4.RELEASE
spring:
cloud:
stream:
bindings:
input:
binder: rabbit
group: ${spring.application.name}_input
content-type: application/json
destination: push_message
rabbit:
bindings:
input:
consumer:
acknowledge-mode: MANUAL
exchange-type: topic
consumer-tag-prefix: ${spring.application.name}_input
binding-routing-key: ${spring.application.name}_input
autoBindDlq: true
republishToDlq: true
在republishToDlq之后不保留或拒绝原始原始队列消息。
以上我的理解正确吗?如果没有,请纠正我。谢谢!
从Spring AMQP的角度来看,使用手动确认模式意味着“应用程序”对确认消息负完全责任。
同样,从Spring AMQP的角度来看,republishToDlq被认为是“成功”的交付。
第一个问题是“您使用MANUAL的用例是什么?它很少需要并且经常被错误地使用。
就是说,我可以看到一个论点,再次从Spring AMQP的角度来看,活页夹是应用程序的一部分,在发布到活页夹中的DLQ之后,我们应该考虑对消息进行确认(当ack模式为MANUAL时)。 )。
请针对活页夹打开GitHub新功能问题,我们来看一下。
同时,解决方法是在侦听器中捕获异常,并在重新引发异常之前确认(而不是确认)消息。
但是,您应该考虑是否真的需要手动安装。