使用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 {@Overridepublic 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/352979.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php7 对象转数组,php7中为对象/关联数组进行解构赋值

在CoffeeScript&#xff0c;Clojure&#xff0c;ES6和许多其他语言中&#xff0c;我们对对象/贴图/等进行了解构&#xff0c;如下所示&#xff1a;obj {keyA: Hello from A, keyB: Hello from B}{keyA, keyB} obj我在php中找到了这个list函数&#xff0c;可以让你像这样构造数…

虚函数表

虚函数   C中的虚函数的实现一般是通过虚函数表(C规范并没有规定具体用哪种方法&#xff0c;但大部分的编译器厂商都选择此方法)。 类的虚函数表是一块连续的内存&#xff0c;每个内存单元中记录一个JMP指令的地址。 注意的是&#xff0c;编译器会为每个有虚函数的类创建一个…

linux bash tutorial

bash read-special-keys-in-bash xdotool linux 登录启动顺序转载于:https://www.cnblogs.com/shaohef/p/9528927.html

centos7安装php8,centos8安装php7.4

一&#xff0c;下载php7.41&#xff0c;官方网站:https://www.php.net/2,下载[rootyjweb source]# wget https://www.php.net/distributions/php-7.4.2.tar.gz说明&#xff1a;在linux上以编译方式安装软件时&#xff0c;多数人都习惯把软件安装到 /usr/local目录下&#xff0c…

C++的四种强制类型转换

C的四种强制类型转换&#xff0c;所以C不是类型安全的。分别为&#xff1a;static_cast , dynamic_cast , const_cast , reinterpret_cast 为什么使用C风格的强制转换可以把想要的任何东西转换成合乎心意的类型。那为什么还需要一个新的C类型的强制转换呢&#xff1f; 新类型的…

MongoDB系列之——安装和启动

CentOS 7 安装MongoDB 4.0 社区版 1. Yum安装 创建Yum仓库先创建新的文件 vim /etc/yum.repos.d/mongodb-org-4.0.repo  在新文件中填入     [mongodb-org-4.0] nameMongoDB Repository baseurlhttps://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.0/x86_64/…

javaone_JavaOne 2012:JavaFX图形技巧和窍门

javaone我回到希尔顿&#xff08;皇家宴会厅B&#xff09;看了Richard Bair的&#xff08;Oracle Java Client Architect&#xff09;的“ JavaFX图形技巧和窍门”。 Bair与FX Experience相关联&#xff0c;并且显然了解JavaFX。 拜尔说&#xff0c;他演讲的主题是表演。 他告诫…

php pdo 参数绑定,PDO预处理之参数绑定和列绑定

摘要&#xff1a;PDO查询中&#xff0c;2个绑定操作&#xff1a;参数绑定与列绑定&#xff1b;参数绑定&#xff1a;bindParm() 和 bindValue();bindParm(:占位符,变量,类型常量) 类型常量默认为字符串bindValue(:占位符,值或变量,类型常量) 如果直接传值&#xff0c;可省略类型…

自定义C++异常处理

例1&#xff1a;自定义一个继承自excepton的异常类myException C标准中&#xff0c;定义在<stdexcept>中的任何异常类都派生自exception Class&#xff0c;本例也只是简单地由exception继承&#xff0c;在try段抛出一个异常并捕捉。代码如下&#xff1a; /* test.cpp ve…

DCL并非单例模式专用

我相信大家都很熟悉DCL&#xff0c;对于缺少实践经验的程序开发人员来说&#xff0c;DCL的学习基本限制在单例模式&#xff0c;但我发现在高并发场景中会经常遇到需要用到DCL的场景&#xff0c;但并非用做单例模式&#xff0c;其实DCL的核心思想和CopyOnWrite很相似&#xff0c…

使用CLI扩展和重新平衡Couchbase集群

Couchbase通过多种方式提供高可用性和灾难恢复 &#xff1a; 同质簇 复写 集群内复制 备份还原 机架区意识 该博客将展示如何使用Couchbase命令行界面&#xff08;CLI&#xff09;创建Couchbase集群。 此外&#xff0c;还可以使用Couchbase REST API和Couchbase Web Consol…

将php源码修改成存在注入的源码,天融信关于ucms系统存在代码注入漏洞的分析...

一、背景介绍UCMS是一款简单的开源内容管理系统&#xff0c;可以非常方便的通过它来快速开发各种各种企业站、文章站、站群系统。系统兼容PHP5.2–PHP7.0&#xff0c;在APACHE、NGINX、IIS上都能使用&#xff0c;支持MySQL SQLite两种数据库。后台简洁高效&#xff0c;上手容易…

第1章 计算机系统漫游(深入理解计算机系统)

1 #include <stdio.h> 2 3 int main() 4 { 5 printf("hello, world\n"); 6 } 1.1 信息就是位上下文 hello程序的声明周期是从一个源程序开始的&#xff0c;即程序员利用编辑器创建并保存的文本文件&#xff0c;文件名是hello.c。源程序实际上就是一个由值…

java impliments,dubbo使用GenericService泛化调用

我们项目中常见场景&#xff0c;java应用内部接口都是使用dubbo&#xff0c;某个非java应用需要调用我们的接口的时候&#xff0c;无法使用dubbo&#xff0c;这是我们需要给它提供其他形式的接口&#xff0c;如restful api等等&#xff0c;这时我们需要为这个接口开发而增加额外…

使用Eclipse 创建 搭建SpringBoot项目

之前用IDEA 创建Springboot 项目感觉十分简单&#xff0c;但是常用的毕竟是Eclipse 所以开一个帖子记录一下Eclipse 如何创建 Springboot 项目 第一步&#xff1a;Help -> Eclipse Marketplace… 在search 中输入 STS install 即可&#xff01; 第二部&#xff1a;new -&g…

static函数与普通函数区别

全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式&#xff0c; 静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序&#xff0c; 当一个源程序由多个源文件…

zendguard php5.4,ZendGuardLoader6.0.0支持PHP5.4.x系列

不知不觉&#xff0c;现在Zend Guard Loader发布了6.0.0版本&#xff0c;支持PHP 5.4.x系列。官方地址&#xff1a;http://www.zend.com/en/products/guard/downloads (需要注册用户后下载)这里提供下常用的版本Windows&#xff1a;附件&#xff1a;ZendGuardLoader-70429-PHP-…

camel mq_Camel:构建基于消息的应用程序

camel mq这是一篇长文章&#xff0c;包含三个单独的主题&#xff1a; Java的Apache Camel入门 使用CamelRunner改善路线的启动 使用Camel构建基于消息的应用程序 但是&#xff0c;由于我准备了包含所有这些材料的camel-demo-1.0.0-SNAPSHOT-project.zip &#xff0c;因此我认…

what??|诞生才一年的BCH竟面临硬分叉的抉择

BCH才刚过一周岁生日一个星期&#xff0c;BCH社区的主力之一Bitcoin ABC&#xff08;BCH全网接近三分之二节点运行的软件系统由Bitcoin ABC开发&#xff09;就搅动了社区的涟漪。8月8号&#xff0c;Bitcoin ABC公布了自己的路线图提出修改BCH的共识协议。而BCH社区的大V之一Cra…

改变div php,JS改变DIV样式

摘要&#xff1a;var boxwindow.οnlοadfunction(){box document.getElementById("box")}function aa(){box.style.height "400px"}function bb(){box.style.width "400px"}function cc(){box.style.backgroundColor "blue"}批改老…