重新发布到dlq后如何取消或拒绝消息

问题描述 投票:0回答:1

当使用者在处理消息期间且在手动确认起作用之前引发异常republishToDlq时,但原始队列消息始终处于nack状态。

环境

[Spring Boot2.1.11.RELEASE

[Spring CloudGreenwich.SR4

[Spring Cloud StreamFishtown.SR4

[spring-cloud-stream-binder-rabbit2.1.4.RELEASE

Yaml配置

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

结果

Rabbitmq Management Result

期望

在republishToDlq之后不保留或拒绝原始原始队列消息。

以上我的理解正确吗?如果没有,请纠正我。谢谢!

spring-cloud-stream
1个回答
0
投票

从Spring AMQP的角度来看,使用手动确认模式意味着“应用程序”对确认消息负完全责任。

同样,从Spring AMQP的角度来看,republishToDlq被认为是“成功”的交付。

第一个问题是“您使用MANUAL的用例是什么?它很少需要并且经常被错误地使用。

就是说,我可以看到一个论点,再次从Spring AMQP的角度来看,活页夹是应用程序的一部分,在发布到活页夹中的DLQ之后,我们应该考虑对消息进行确认(当ack模式为MANUAL时)。 )。

请针对活页夹打开GitHub新功能问题,我们来看一下。

同时,解决方法是在侦听器中捕获异常,并在重新引发异常之前确认(而不是确认)消息。

但是,您应该考虑是否真的需要手动安装。

© www.soinside.com 2019 - 2024. All rights reserved.