当前位置: 首页 > news >正文

网站运营经理岳阳卖房网站

网站运营经理,岳阳卖房网站,wordpress手机顶部菜单,wordpress合并压缩文章目录 1、实现原理2、DegradeSlot类3、CircuitBreaker4、触发断路器 1、实现原理 Sentinel的降级是基于状态机来实现的#xff1a; 2、DegradeSlot类 熔断降级的逻辑在DegradeSlot类中实现#xff0c;核心API#xff1a; Override public void entry(Context context,… 文章目录 1、实现原理2、DegradeSlot类3、CircuitBreaker4、触发断路器 1、实现原理 Sentinel的降级是基于状态机来实现的 2、DegradeSlot类 熔断降级的逻辑在DegradeSlot类中实现核心API Override public void entry(Context context, ResourceWrapper resourceWrapper, DefaultNode node, int count, boolean prioritized, Object... args) throws Throwable {// 熔断降级规则判断performChecking(context, resourceWrapper);// 继续下一个slotfireEntry(context, resourceWrapper, node, count, prioritized, args); }继续进入performChecking方法 void performChecking(Context context, ResourceWrapper r) throws BlockException {// 获取当前资源上的所有的断路器 CircuitBreakerListCircuitBreaker circuitBreakers DegradeRuleManager.getCircuitBreakers(r.getName());if (circuitBreakers null || circuitBreakers.isEmpty()) {return;}for (CircuitBreaker cb : circuitBreakers) {// 遍历断路器逐个判断if (!cb.tryPass(context)) {throw new DegradeException(cb.getRule().getLimitApp(), cb.getRule());}} }3、CircuitBreaker 进入断路器类CircuitBreaker的tryPass方法中 Override public boolean tryPass(Context context) {// 判断状态机状态if (currentState.get() State.CLOSED) {// 如果是closed状态直接放行return true;}if (currentState.get() State.OPEN) {// 如果是OPEN状态断路器打开// 继续判断OPEN时间窗是否结束如果是则把状态从OPEN切换到 HALF_OPEN返回truereturn retryTimeoutArrived() fromOpenToHalfOpen(context);}// OPEN状态并且时间窗未到返回falsereturn false; }有关时间窗的判断在retryTimeoutArrived()方法 protected boolean retryTimeoutArrived() {// 当前时间 大于 下一次 HalfOpen的重试时间return TimeUtil.currentTimeMillis() nextRetryTimestamp; }OPEN到HALF_OPEN切换在fromOpenToHalfOpen(context)方法 protected boolean fromOpenToHalfOpen(Context context) {// 基于CAS修改状态从 OPEN到 HALF_OPENif (currentState.compareAndSet(State.OPEN, State.HALF_OPEN)) {// 状态变更的事件通知notifyObservers(State.OPEN, State.HALF_OPEN, null);// 得到当前资源Entry entry context.getCurEntry();// 给资源设置监听器在资源Entry销毁时资源业务执行完毕时触发entry.whenTerminate(new BiConsumerContext, Entry() {Overridepublic void accept(Context context, Entry entry) {// 判断 资源业务是否异常if (entry.getBlockError() ! null) {// 如果异常则再次进入OPEN状态currentState.compareAndSet(State.HALF_OPEN, State.OPEN);notifyObservers(State.HALF_OPEN, State.OPEN, 1.0d);}}});return true;}return false; }到此出现了从OPEN到HALF_OPEN、从HALF_OPEN到OPEN的变化但是还有几个没有 从CLOSED到OPEN从HALF_OPEN到CLOSED 4、触发断路器 请求经过所有插槽 后一定会执行exit方法而在DegradeSlot的exit方法中 会调用CircuitBreaker的onRequestComplete方法。而CircuitBreaker有两个实现 这里以异常比例熔断为例来看进入ExceptionCircuitBreaker的onRequestComplete方法 Override public void onRequestComplete(Context context) {// 获取资源 EntryEntry entry context.getCurEntry();if (entry null) {return;}// 尝试获取资源中的异常Throwable error entry.getError();// 获取计数器同样采用了滑动窗口来计数SimpleErrorCounter counter stat.currentWindow().value();if (error ! null) {// 如果出现异常则 error计数器 1counter.getErrorCount().add(1);}// 不管是否出现异常total计数器 1counter.getTotalCount().add(1);// 判断异常比例是否超出阈值handleStateChangeWhenThresholdExceeded(error); }来看阈值判断的方法 private void handleStateChangeWhenThresholdExceeded(Throwable error) {// 如果当前已经是OPEN状态不做处理if (currentState.get() State.OPEN) {return;}// 如果已经是 HALF_OPEN 状态判断是否需求切换状态if (currentState.get() State.HALF_OPEN) {if (error null) {// 没有异常则从 HALF_OPEN 到 CLOSEDfromHalfOpenToClose();} else {// 有一次再次进入OPENfromHalfOpenToOpen(1.0d);}return;}// 说明当前是CLOSE状态需要判断是否触发阈值ListSimpleErrorCounter counters stat.values();long errCount 0;long totalCount 0;// 累加计算 异常请求数量、总请求数量for (SimpleErrorCounter counter : counters) {errCount counter.errorCount.sum();totalCount counter.totalCount.sum();}// 如果总请求数量未达到阈值什么都不做if (totalCount minRequestAmount) {return;}double curCount errCount;if (strategy DEGRADE_GRADE_EXCEPTION_RATIO) {// 计算请求的异常比例curCount errCount * 1.0d / totalCount;}// 如果比例超过阈值切换到 OPENif (curCount threshold) {transformToOpen(curCount);} }
http://www.hkea.cn/news/14291134/

相关文章:

  • wordpress网站的根目录在哪口碑好的聊城网站建设
  • 可以注册邮箱的网站开封建设网站
  • 济宁培训网站建设企业网站制作前期需要什么资料
  • 哪个网站推广比较好宣传片拍摄报价明细
  • 方太网站谁做的远程教育网站建设方案
  • 山东天成水利建设 网站自己怎么制作网站
  • 西安手机网站开发精品课程网站开发项目
  • 什么什么设计英文网站站长工具收录查询
  • 濮阳做网站的专业型企业网站有哪些
  • 做网站时 404网页如何指向深圳关键词推广
  • 大型网站建设推广名校建设专题网站
  • 如何做网站焦点图佛山网站建设网站
  • 避免网站侵权注册1000万公司每年费用多少
  • 记事本做网站怎么调整图片间距写软文的app
  • 郑州网站设计 公司网站网站开发软件
  • 网上做家教哪个网站微信开发公众平台
  • 东莞网站制作方案定制外贸假发网站
  • 青岛建设网站企业淘宝客不建网站怎样做
  • 网区建站产品设计工程师
  • 电子商务网站建设报告分析vi平面设计公司
  • 网站建设与管理 教学视频开封市建设银行网站
  • 德宏做网站wordpress3.8.1下载
  • 小型网站建设价格长沙做网站建设的
  • 互联网网站建设一条龙服务wordpress调用用户名密码
  • 建设工程规划许可证网站国外网站怎么上
  • 以前做视频的网站吗淘宝上面如何做网站
  • 宝安做棋牌网站建设找哪家公司好自己做的网站收费
  • phpcms 网站根目录三里河网站建设
  • 请人制作一个网站需要多少钱jquery插件网站推荐
  • 二七郑州网站建设环卫公厕建设门户网站访谈