Микросервис SpringBoot @StreamListener повторяет неограниченное время при запуске RunTimeException - PullRequest
0 голосов
/ 27 августа 2018

У меня есть метод @StreamListener, где он будет выполнять вызов REST. Когда вызов REST возвращает исключение, метод @StreamListener сгенерирует исключение RunTimeException и выполнит повторную попытку. Метод @StreamListener будет повторять неограниченное количество раз при возникновении исключения RuntimeException

Конфигурация Spring Cloud Stream Retry:

spring.cloud.stream.kafka.bindings.inputChannel.consumer.enableDlq=true
spring.cloud.stream.bindings.inputChannel.consumer.maxAttempts=3
spring.cloud.stream.bindings.inputChannel.consumer.concurrency=3
spring.cloud.stream.bindings.inputChannel.consumer.backOffInitialInterval=300000
spring.cloud.stream.bindings.inputChannel.consumer.backOffMaxInterval=600000

Версия зависимостей микросервиса SpringBoot:

Spring Boot 2.0.3
Spring Cloud Stream Elmhurst.RELEASE
Kafka broker 1.1.0

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

после нескольких проб и ошибок мы обнаружили, что конфигурация kafka: max.poll.interval.ms по умолчанию равна 5 минутам. Благодаря нашему механизму повторных попыток потребителя весь процесс повторных попыток займет 15 минут в худшем случае.

Таким образом, через 5 минут после получения первого сообщения раздел kafka решает, что потребитель не предоставил никакого ответа, выполняет автоматическую балансировку и назначает то же сообщение другому разделу.

0 голосов
/ 28 августа 2018

Вы, конечно, можете увеличить количество попыток (свойство maxAttempts) до значения, подобного Integer.MAX_VALUE, или вы можете предоставить экземпляр своего собственного компонента RetryTemplate, который можно настроить по своему усмотрению. Здесь вы можете получить больше информации https://docs.spring.io/spring-cloud-stream/docs/current/reference/htmlsingle/#_retry_template

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