Как я могу nack или отклонить сообщение после republi sh в dlq - PullRequest
0 голосов
/ 17 января 2020

Когда потребитель генерирует исключение 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

Конфигурация 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

Ожидается

Нет или отклонение исходного сообщения исходной очереди после republishToDlq.

Правильно ли мое понимание выше? Если нет, пожалуйста, поправьте меня. Спасибо!

1 Ответ

0 голосов
/ 17 января 2020

С точки зрения Spring AMQP, использование режима подтверждения MANUAL означает, что «приложение» несет полную ответственность за получение сообщений.

Опять же, с точки зрения Spring AMQP, republishToDlq считается «успешной» доставкой.

Первый вопрос: «Каков ваш вариант использования для РУЧНОЙ»? Это редко требуется и часто используется по ошибке.

Тем не менее, я вижу аргумент, который, опять же, с точки зрения Spring AMQP, связыватель является частью приложения, и мы должны посмотреть на получение сообщения после публикации к DLQ в подшивке (когда режим подтверждения является ручным).

Пожалуйста, откройте новую функцию GitHub для подшивки, и мы посмотрим.

А пока Обходной путь заключается в том, чтобы перехватить исключение в вашем слушателе и подтвердить (а не nack) сообщение перед тем, как повторно выдать исключение.

Но вы должны подумать, действительно ли нужны ручные подтверждения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...