Можем ли мы использовать как <circuitBreaker>с <failover>в Apache Camel - PullRequest
0 голосов
/ 24 мая 2019

Мне нужно отправлять сообщения двум внутренним IBM MQs в режиме отказоустойчивости + циклического перебора, но я обнаружил, что если один из IBM MQ вышел из строя, верблюд все равно будет пробовать конечную точку сбоя для каждого входящего сообщения, что замедляетВесь процесс.

Я пытаюсь объединить автоматический выключатель, но верблюд не позволяет использовать с.

Как я могу попросить верблюда не пробовать неисправную конечную точку в течение определенного периодавремя

1 Ответ

0 голосов
/ 27 мая 2019

с обработчиком ошибок и условие исключения * например, 1004 *

(java DSL) предположим, что вы включаете исключение, которое хотите обработать, в MyDelayedRetryableException:

onException(MyDelayedRetryableException.class)
    .useOriginalMessage()
    .redeliveryDelay(1000) \\ wait 1 second before retry
    .backOffMultiplier(2.0) \\every retry wait last delay multiplied this value (1000, 2000, 4000,...)
    .maximumRedeliveries(100) \\ attempts before giving up
    .retryAttemptedLogLevel(LoggingLevel.WARN)
    .useExponentialBackOff();

Приведенный выше пример относится ко всем маршрутам, вы также можете указать обработку ошибок для каждого маршрута.Есть несколько способов сделать то, что вы просите, например, с помощью приведенного выше примера вы можете сделать его общим и использовать часть onExceptionOccurred для подключения некоторой логики:

.onExceptionOccurred(
    exchange -> {
        //extra logic, like accessing the exchange headers
        log.error(exchange.getException() == null ? "no message" : exchange.getException().getMessage());
    }
)

см. https://camel.apache.org/error-handling-in-camel.html для получения дополнительной информации

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