我需要以故障转移+循环方式将消息发送到两个后端IBM MQ,但是我发现,如果一个IBM MQ失败,骆驼仍然会为每个入站消息尝试失败的端点,这会降低全过程。
我尝试结合使用断路器,但骆驼不允许与一起使用。
我如何要求骆驼在特定时间段内不要尝试出现故障的端点?
答案 0 :(得分:0)
带有error handler和exception clause
例如(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