使用Hystrix DSL创建弹性骆驼应用程序

Apache Camel是一个成熟的集成库(到现在已有9年的历史了),它实现了Enterprise Integration Patterns一书中的所有模式。 但是Camel不仅是EIP实现库,它还是一个不断发展,添加新模式并适应行业变化的现代框架。 除了在每个版本中添加数十个连接器之外,Camel还与Java语言新版本本身和其他Java框架提供的新功能紧密结合。 随着时间的流逝,诸如SOA和ESB之类的某些架构样式逐渐失去吸引力,而诸如REST之类的新架构样式使微服务变得流行。

为了使开发人员能够利用这些新趋势进行集成,Camel通过添加新的DSL(例如REST DSL)和新模式(例如Circuit Breaker)以及组件(例如Spring Boot)来做出响应。 这还不是全部,我们还远远没有完成。 借助Docker容器和Kubernetes之类的技术,IT行业现在的发展速度甚至更快,Camel也正在不断发展以减轻开发人员的负担。 要了解某种工具,您需要在Docker和Kubernetes上开发和运行应用程序,请查看Fabric8项目,尤其是工具,例如Docker Maven插件,Kubernetes CDI扩展,Kubernetes Java客户端,针对Kubernetes的Arquilian测试等。大量先进技术带来的激动人心的时代即将来临,让我们看一下其中的一种:骆驼和基于Hystrix的断路器。

两个骆驼断路器,该选择哪个?

两年前,当我第一次阅读Michael Nygard的Release It时我无法停止在Camel中实现Circuit Breaker模式 。 通常,我会根据真正的客户需求来贡献自己的力量,但是断路器模式是如此优雅,我不得不这样做。 为了以非介入方式实现它,我将其添加为Camel负载均衡器策略。 这很简单:

<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
  <route>
    <from uri="direct:start"/>
    <loadBalance>
        <circuitBreaker threshold="2" halfOpenAfter="1000">
            <exception>MyCustomException</exception>
        </circuitBreaker>
        <to uri="mock:result"/>
    </loadBalance>
  </route>
</camelContext>

上面的DSL是自我描述的:如果模拟:结果端点抛出的MyCustomExceptions数量达到阈值,CircuitBreaker进入打开状态并开始拒绝所有请求。 1000毫秒后,它将进入HalfOpenAfter状态,并且在此状态下的第一个请求的结果将其下一个状态定义为已关闭或已打开。 您可以想象这是CircuitBreker的最简单的实现,但仍然有用。

屏幕截图2016-05-26 at 07.56.13

从那时起,Microseservices体系结构变得越来越流行,Circuit Breaker Pattern及其java实现Hystrix也是如此劳尔·克里帕拉尼(RaúlKripalani)在某个时候开始在骆驼(Camel)实施Hystrix,并将所有基础工作都准备就绪,但随着时间的流逝,它失去了动力。 然后一次又一次地看到来自不同客户的相同请求,我接下了继电器并继续工作,并将Hystrix组件推到了Camel。 看到社区的反馈,它仍然没有它应有的优雅。 然后, Claus介入并通过将Hystrix转变为EIP(而不是组件)而使其成为骆驼DSL的一部分。 那么,现在在骆驼中创建基于Hystrix的断路器是什么样子呢?

public class ClientRoute extends RouteBuilder {

    @Override
    public void configure() {
        from("timer:trigger?period=1s")
            .log(" Client request: ${body}")
            .hystrix()
                .to("http://localhost:9090/service1")
            // use onFallback() to provide a repsonse message immediately: .transform().simple("Fallback ${body}")
            // use onFallbackViaNetwork() when there is a 2nd service call
            .onFallbackViaNetwork()
                .to("http://localhost:7070/service2")
            .end()
            .log("Client response: ${body}");
    }
}

在上面的示例中,您只能看到断路器的少数可用选项,要查看所有这些选项,请检出官方文档并试用放置在示例中的 Claus应用程序。

根据此示例,您可能认为Hystrix是Camel核心的一部分,但事实并非如此。 骆驼核心仍然是这样,没有第三方库的依赖。 如果要使用基于Hystrix的断路器,则需要像其他任何非核心组件一样,将camel-hystrix依赖项添加到依赖项中,并使其在运行时可用。

快速失败,后备,隔板,超时等

Hystrix库实现的不仅仅是断路器模式。 它也可以进行批量处理,请求缓存,超时,请求折叠等。Camel中的实现不支持请求折叠和缓存,因为这些已经使用Camel中可用的其他模式和组件完成了。 Camel中的请求折叠可以使用Aggregator EIP完成,而缓存可以使用Redis,Inifinspan,Hazelcast等缓存组件完成。Camel中的Hystrix DSL提供了Hystrix支持的大约30种配置选项,还通过JMX和/或公开了指标用于Hystrix仪表板的 REST。

hystrix-web-console

最后一点,不要忘记创建一个真正的弹性应用程序,您需要的不仅仅是Hystrix。 Hystrix将在线程池级别进行批量处理,但是如果您不在进程,主机和物理计算机级别应用相同的原理,那还不够。 要创建一个可恢复的分布式系统,您还需要使用Retry,Throttleing,Timeout…和其他好的技巧,我在Camel Design Patterns一书中已经描述了其中的一些技巧。

要了解新模式,请查看示例 ,然后开始使用Hystrix保护基于Camel的微服务。

翻译自: https://www.javacodegeeks.com/2016/06/create-resilient-camel-applications-hystrix-dsl.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值