Reactor RabbitMQ: восстановиться после тайм-аута подтверждения? ⇐ JAVA

Программисты JAVA общаются здесь
Anonymous
Reactor RabbitMQ: восстановиться после тайм-аута подтверждения?

Сообщение Anonymous »

Каков подходящий способ восстановления таймаутов подтверждения доставки с помощью Reactor RabbitMQ?
Мы используем клиентскую библиотеку Reactor RabbitMQ, настроенную с помощью ConsumerManualAck. Время от времени в наших журналах мы наблюдаем следующую ошибку:

c.r.c.ShutdownSignalException: ошибка канала; метод протокола: #method(reply-code=406, ответ-текст=PRECONDITION_FAILED — истекло время ожидания подтверждения доставки на канале 5. Используемое значение таймаута: 1800000 мс. Это значение таймаута можно настроить, см. руководство по документации для потребителей. узнать м...

После этого оператора (предположительно зарегистрированного этим оператором) канал немедленно закрывается, Reactive Flux прекращается и обработка сообщений соответственно останавливается.
В клиенте настроен обработчик исключений повторного подтверждения в попытке минимизировать количество сбоев соединения:

Код: Выделить всё

Receiver receiver = RabbitFlux.createReceiver();
ConsumeOptions consumeOptions = new ConsumeOptions()
.exceptionHandler( new ExceptionHandlers.RetryAcknowledgmentExceptionHandler(
Duration.ofSeconds(10), Duration.ofMillis(200), ExceptionHandlers.CONNECTION_RECOVERY_PREDICATE
));
receiver.consumeManualAck("queue_name", consumeOptions)
.subscribe(delivery -> {
// message processing omitted
// acknowledge message
delivery.ack();
});
Однако мы, должно быть, что-то упустили из виду, поскольку проблема все еще наблюдается время от времени.
В поисках решения в этом ответе SO говорится, что можно изменить значение тайм-аута, однако для нас это будет невозможно, поскольку Flux все равно будет завершен.

Подробнее здесь: https://stackoverflow.com/questions/791 ... nt-timeout

Вернуться в «JAVA»