Установить максимальное количество попыток AMQP клиента - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть случай, когда у меня может быть Java NPE в приемнике, который принимает полезную нагрузку очереди.Я получаю несколько попыток и ошибок:

 18:41:50.549 [processingeContainer-1] WARN  o.s.a.r.l.ConditionalRejectingErrorHandler - Execution of Rabbit message listener failed.
2019-09-24 18:41:50,551 INFO  [stdout] (processingContainer-1) org.springframework.amqp.rabbit.listener.exception.ListenerExecutionFailedException: Listener method 'transactionProcess' threw exception

Есть ли способ ограничить попытки клиента AMQP?

1 Ответ

0 голосов
/ 24 сентября 2019

Вы действительно должны исправить NPE, но вы можете настроить обработчик ошибок контейнера слушателя.

По умолчанию ConditionalRejectingErrorHandler обрабатывает определенные исключения как фатальные.

Используется DefaultExceptionStrategy, который имеетследующий код:

    private boolean isCauseFatal(Throwable cause) {
        return cause instanceof MessageConversionException // NOSONAR boolean complexity
                || cause instanceof org.springframework.messaging.converter.MessageConversionException
                || cause instanceof MethodArgumentResolutionException
                || cause instanceof NoSuchMethodException
                || cause instanceof ClassCastException
                || isUserCauseFatal(cause);
    }

    /**
     * Subclasses can override this to add custom exceptions.
     * @param cause the cause
     * @return true if the cause is fatal.
     */
    protected boolean isUserCauseFatal(Throwable cause) {
        return false;
    }

Итак, сконфигурируйте свой собственный ConditionalRejectingErrorHandler с подклассом DefaultExceptionStrategy, который переопределяет isUserCauseFatal() и возвращает true для NullPointerException.

Затем вы вводитеваша ошибка содержится в контейнере слушателя или фабрике контейнера слушателя.

Другой способ - добавить перехватчик повторов;по умолчанию ошибка регистрируется только после того, как повторные попытки исчерпаны.С пружинной загрузкой восстановитель по умолчанию является RejectAndDontRequeueRecoverer.

...