Apache Camel中的断路器模式

骆驼通常在分布式环境中用于访问远程资源。 远程服务可能由于各种原因和期间而失败。 对于短时间后暂时不可用且可恢复的服务,重试策略可能会有所帮助。 但是某些服务可能会失败或挂起更长时间,从而使调用应用程序无响应且速度缓慢。 防止级联故障和关键资源耗尽的一个好策略是Michael Nygard在Release It!中描述的断路器模式 书。
断路器是一种有状态模式,用于包装容易发生故障的资源并监视错误。 最初,断路器处于关闭状态 ,并将所有调用传递给包装的资源。 当故障达到某个阈值时,电路将转为打开状态 ,在此状态下,错误将错误返回给调用方,而没有实际调用包装的资源。 这样可以防止已经发生故障的资源过载。 在这种状态下,我们需要一种机制来检测故障是否已经结束并开始调用受保护的资源。 这就是所谓的半开状态的第三个状态。 在上次故障之后的一定时间后达到此状态。 在这种状态下,调用将传递到受保护的资源,但是调用的结果很重要。 如果调用成功,则假定受保护的资源已恢复并且电路进入关闭状态 ,如果调用失败,则重置超时,并将电路移回到拒绝所有调用的打开状态 。 这是Martin Fowler 帖子中Circuit Breaker的状态图:

州

骆驼如何实现断路器?

Camel的最新快照版本提供了Circuit Breaker,作为负载均衡器策略。
Camel负载平衡器已经具有用于Round Robin,Random,Failover等的策略,现在还具有CircuiBreaker策略。

这是一个示例负载均衡器,它使用具有2个错误的阈值和1秒的HalfOpenAfter超时阈值的断路器策略。 还要注意,此策略仅适用于由MyCustomException引起的错误

new RouteBuilder() {
    public void configure() {
        from("direct:start").loadBalance()
            .circuitBreaker(2, 1000L, MyCustomException.class)
                .to("mock:result");
    }
};

这是使用Spring XML DSL的相同示例:

<route>
    <from uri="direct:start"/>
    <loadBalance>
        <circuitBreaker threshold="2" halfOpenAfter="1000">
            <exception>MyCustomException</exception>
        </circuitBreaker>
        <to uri="mock:result"/>
    </loadBalance>
</route>

翻译自: https://www.javacodegeeks.com/2014/04/circuit-breaker-pattern-in-apache-camel.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值