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

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

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

相关文章

深入学习决策树算法原理

分类技术&#xff08;或分类法&#xff09;是一种根据输入数据建立分类模型的系统方法&#xff0c;分类法的例子包括决策分类法&#xff0c;基于规则的分类法&#xff0c;神经网络&#xff0c;支持向量机和朴素贝叶斯分类法。这些技术都使用一种学习算法&#xff08;learning a…

HTML 页面自动刷新

学习就是一个不断积累的过程&#xff0c;每一天能够学到一点新东西说明自己就在进步&#xff01;&#xff01; HTML head 里面设置页面自动刷新功能 <meta http-equiv"Refresh" content"2"> <meta http-equiv"X-UA-Compatible" cont…

linux 编译安装python,linux下编译安装python2.7.6

安装依赖开发包yum install readline-develyum install *argparse*wget https://www.python.org/ftp/python/2.7.6/Python2.7.6.tgzipython 下载地址https://github.com/ipython/ipython/releases/download/rel-2.1.0/ipython-2.1.0.tar.gz编译安装python 2.7.6[[email protec…

kotlin访问控制符可见性

名称访问权限public&#xff08;默认&#xff09;该权限符修饰的成员可以在任何地方被访问internal该权限符修饰的成员可以在该类的内部或者文件的内部或者同一个模块内被访问protected该权限符修饰的成员可以在该类的内部或者文件的内部或者其子类中被访问private该权限符修饰…

JDK 8中方便的新地图默认方法

Map接口在JDK 8中提供了一些方便的新方法 。 因为我在本文中介绍的Map方法是作为默认方法实现的&#xff0c;所以Map接口的所有现有实现都享有默认方法中定义的默认行为&#xff0c;而无需任何新代码。 这篇文章中介绍的JDK 8引入的Map方法是getOrDefault&#xff08;Object&am…

JS观察者模式-自定义事件

111转载于:https://www.cnblogs.com/zoeeying/p/10139131.html

linux中下载的服务压缩包存放在,linux 下tomcat6 配置为服务

本人从官网http://tomcat.apache.org/上面下载的6.0.1_31版本&#xff0c;并解压包后改名存放在&#xff1a;/usr/share/tomcat6本人使用的是root用户登录&#xff0c;下面就说说具体的操作步骤&#xff0c;1、在/usr/share/tomcat6/bin中有commons-daemon-native.tar.gz压缩包…

Java 8 Friday Goodies:精益并发

在Data Geekery &#xff0c;我们喜欢Java。 而且&#xff0c;由于我们真的很喜欢jOOQ的流畅的API和查询DSL &#xff0c;我们对Java 8将为我们的生态系统带来什么感到非常兴奋。 我们已经写了一些关于Java 8好东西的博客 &#xff0c;现在我们觉得是时候开始一个新的博客系列了…

Floyd最短路(带路径输出)

摘要(以下内容来自百度) Floyd算法又称为插点法&#xff0c;是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法&#xff0c;与Dijkstra算法类似。 该算法名称以创始人之一、1978年图灵奖获得者、斯坦福大学计算机科学系教授罗伯特弗洛伊德命名。 简介编辑 在…

CSS 小结笔记之清除浮动

浮动是一个非常好用的属性&#xff0c;但是有时会出现一些问题&#xff0c;需要进行清除浮动。例如 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-wi…

jsp分割字符串并遍历

1、先引入JSTL库 <% taglib uri"http://java.sun.com/jsp/jstl/core" prefix"c"%> 2、分割字符串并遍历&#xff08;按“,”分割&#xff09; <c:forTokens items"${danger.imagesPath}" delims"," var"file"> …

linux shell 脚本 父子进程 等待子进程,SHELL父子进程分析

导言本节将就shell交互(脚本执行)过程中涉及子进程(subprocess)以及子SHELL(subshell)的部分&#xff0c;配以实例&#xff0c;进行说明。将详细讨论如下问题&#xff1a;subprocess和subshell是什么subprocess的产生过程是什么什么情况下会产生subprocess和subshellshell编程中…

百里香Spring测试的意见

我最近将其转换为thymeleaf &#xff0c;以便在基于Spring的Web应用程序中进行视图模板化&#xff0c;而不是jsp。 百里香叶文档中所有关于为什么百叶香叶在jsp上为何能保持水分的争论都被我肯定了。 除了能够预览模板之外&#xff0c;对我来说&#xff0c;主要原因之一是视图…

路由与交换--交换机常用配置及其实验案例

1 交换机常用配置命令 1.1 配置主机名与口令 Switch>enable Switch#config t Switch(config)#hostname SA SA(config)#enable password cisco&#xff08;明文&#xff09; SA(config)#enable secret cisco&#xff08;暗文&#xff09; SA(config)#exit SA#show running-co…

js使用工具将表单封装成json字符串传到后台,js截取字符串(学生笔记)

<script src"js/jquery.min.js"></script><script src"https://cdn.bootcss.com/jquery.serializeJSON/2.9.0/jquery.serializejson.js"></script><script>// / //原始版本// $("#1").click(function(){// …

linux自动启动network服务,Windows/Linux 创建开机启动服务

系统服务是一种应用程序类型&#xff0c;它在后台运行。服务应用程序通常可以在本地和通过网络为用户提供一些功能。有些软件无需安装解压就能使用&#xff0c;或者在安装时未向系统注册服务。如果我们需要开机启动&#xff0c;需要手动创建服务。Windows系统篇相对于在注册表中…

对 Vue 的理解(一)

一、什么是 Vue ? 首先&#xff0c;Vue 是一个 MVVM 框架&#xff0c;M -- 模型&#xff0c;就是用来定义驱动的数据&#xff0c;V -- 视图&#xff0c;是经过数据改变后的 html&#xff0c;VM -- 框架视图&#xff0c;就是用来实现双向绑定的中间桥梁。Vue.js 是采用数据劫持…

Nginx做前端Proxy时TIME_WAIT过多的问题

我们的DSP系统目前基本非凌晨时段的QPS都在10W以上&#xff0c;我们使用Golang来处理这些HTTP请求&#xff0c;Web服务器的前端用Nginx来做负载均衡&#xff0c;通过Nginx的proxy_pass来与Golang交互。由于nginx代理使用了短链接的方式和后端交互的原因&#xff0c;使得系统TIM…

JDK 8功能的可疑方面

我们大多数使用Java进行开发的人通常都热衷于JDK 8附带的功能和改进。 但是&#xff0c;最近有几篇文章指出了某些功能可能会被滥用和滥用&#xff0c;并可能在将来导致其他问题。 这些功能使我想起了J2SE 5中引入的自动装箱功能&#xff0c;虽然有其有用的情况&#xff0c;但是…

Xshell 基本使用方式 (1) -- 使用Xshell 连接 VMware下的linux系统

在VMware的虚拟机设置下的网络适配器设置成桥接模式&#xff0c;点击确定。 在终端中输入ifconfig命令查看IP 打开Xshell 新建会话 输入刚刚获取的IP地址&#xff0c;我的是219.219.198.225 如果点击右侧的用户身份验证 输入你的linux登录用户名以及密码 点击连接 可以看到已经…