繁体   English   中英

如何在 Apache Camel 中结合 Redelivery 策略和 Hystrix 断路器?

[英]How to combine Redelivery policy and Hystrix circuit breaker in Apache Camel?

我想使用重试和 Hystrix 断路器来实现 Apache Camel 路由。 我的路线是这样的:

<route>
......
  <onException>
        <exception>java.lang.Exception</exception>
        <redeliveryPolicy  redeliveryDelay="150" maximumRedeliveries="3" logRetryAttempted="true" retryAttemptedLogLevel="WARN"/>
  </onException>
  <hystrix>
        <hystrixConfiguration id="MyServiceHystrix" />
        <to uri="{{my.service.endpoint}}?bridgeEndpoint=true"/>
  </hystrix>
</route>

当在Hystrix 命令线程中调用骆驼 http4 端点时, CamelInternalProcessor不会调用RedeliveryErrorHandler并且没有重试。 堆栈跟踪的基本原则是:

at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:542)
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:197)
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:120)
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:83)
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:197)
    at org.apache.camel.component.direct.DirectProducer.process(DirectProducer.java:62)
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:120)
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:83)

有人知道为什么会这样吗? 我可以在不拆分路线的情况下将两者结合起来吗?

这可能有助于其他人设计重试逻辑。

Camel 有.circuitBreaker().inheritErrorHandler(true)但这不再起作用了。 https://camel.apache.org/manual/latest/hystrix-eip.html ),也不推荐使用.loadbalancer().circuitBreaker() 粘贴代码库。

/** @deprecated */
@Deprecated
public LoadBalanceDefinition circuitBreaker(int threshold, long halfOpenAfter, Class<?>... exceptions)

但是,我们可以添加以下行以在出现异常时重试。

onException(Exception.class)
.maximumRedeliveries(5) //No of times
.redeliveryDelay(1000); //Delay between retries in ms.

在上面的示例中,它将重试所有异常,但是,我们可以通过将 Exception.class 替换为您的程序所针对的对象(如 NullPointerException.class 或 MyCustomException.class)来缩小重试逻辑以针对特定异常

更新:完全错过了你的问题。 我几乎用 Java DSL 写了你用 XML 做的事情。 忽略!!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM