雪崩产生原因:如果在A的链路上某个或几个被调用的子服务不可用或延迟较高,则会导致调用A服务的请求被堵住。堵住的请求会消耗占用掉系统的线程、io等资源,当该类请求越来越多,占用的计算机资源越来越多的时候,会导致系统瓶颈出现,造成其他的请求同样不可用,最终导致业务系统崩溃,又称:雪崩效应。

解决办法:熔断、服务降级

熔断器模式定义了熔断器开关相互转换的逻辑:。

服务的健康状况 = 请求失败数 / 请求总数.

熔断器开关由关闭到打开的状态转换是通过当前服务健康状况和设定阈值比较决定的.

当熔断器开关关闭时, 请求被允许通过熔断器. 如果当前健康状况高于设定阈值, 开关继续保持关闭. 如果当前健康状况低于设定阈值, 开关则切换为打开状态.

当熔断器开关打开时, 请求被禁止通过.

当熔断器开关处于打开状态, 经过一段时间后, 熔断器会自动进入半开状态, 这时熔断器只允许一个请求通过. 当该请求调用成功时, 熔断器恢复到关闭状态. 若该请求失败, 熔断器继续保持打开状态, 接下来的请求被禁止通过.

熔断器的开关能保证服务调用者在调用异常服务时, 快速返回结果, 避免大量的同步等待. 并且熔断器能在一段时间后继续侦测请求执行结果, 提供恢复服务调用的可能.

Hystrix的内部处理逻辑

构建Hystrix的Command对象, 调用执行方法.

Hystrix检查当前服务的熔断器开关是否开启, 若开启, 则执行降级服务getFallback方法.

若熔断器开关关闭, 则Hystrix检查当前服务的线程池是否能接收新的请求, 若超过线程池已满, 则执行降级服务getFallback方法.

若线程池接受请求, 则Hystrix开始执行服务调用具体逻辑run方法.

若服务执行失败, 则执行降级服务getFallback方法, 并将执行结果上报Metrics更新服务健康状况.

若服务执行超时, 则执行降级服务getFallback方法, 并将执行结果上报Metrics更新服务健康状况.

若服务执行成功, 返回正常结果.

若服务降级方法getFallback执行成功, 则返回降级结果.

若服务降级方法getFallback执行失败, 则抛出异常.

spring boot集成熔断:

1.引入依赖

org.springframework.cloud

spring-cloud-starter-hystrix

2.配置文件新增

feign:

hystrix:

enabled: true

###超时时间

hystrix:

command:

default:

execution:

isolation:

thread:

timeoutInMilliseconds: 5000

配置文件改为微服务无响应超过5秒钟

3.新建fallback类 默认:微服务无响应1秒内

Hy@Component

public class MemberFeignService implements MemberFeign {

//服务的降级处理

public List getOrderByUserList() {

List listUser = new ArrayList();

listUser.add("not orderUser list");

return listUser;

}

}

java雪崩_java-雪崩效应及解决办法相关推荐

  1. 微服务架构中的雪崩问题产生原因及解决办法

    微服务架构中的雪崩问题产生原因及解决办法 参考文章: (1)微服务架构中的雪崩问题产生原因及解决办法 (2)https://www.cnblogs.com/panchanggui/p/10330924 ...

  2. 图解Myeclipse 导入Java Web项目报错的解决办法听语音

    图解Myeclipse 导入Java Web项目报错的解决办法听语音 https://jingyan.baidu.com/article/046a7b3e953ef3f9c27fa93d.html

  3. cmd运行java打印不出中文的解决办法

    cmd运行java打印不出中文的解决办法 更换cmd的编码方式 编码表如下 打开cmd时输入: chcp 65001 进入utf-8的编码方式 更改成其他编码方式:chcp + 对应字符 即可

  4. Tomcat内存溢出(java.lang.OutOfMemoryError: PermGen space)的解决办法

    原文:http://cheen.iteye.com/blog/1687420 Tomcat启动时报如下错误:       java.lang.OutOfMemoryError: PermGen spa ...

  5. java 大数据处理之内存溢出解决办法(一)

    http://www.cnblogs.com/a757956132/p/4644910.html http://my.oschina.net/songhongxu/blog/209951 一.内存溢出 ...

  6. 在Servlet使用getServletContext()获取ServletContext对象出现java.lang.NullPointerException(空指针)异常的解决办法...

    今天遇到了一个在servlet的service方法中获取ServletContext对象出现java.lang.NullPointerException(空指针)异常,代码如下: String pat ...

  7. eclipse java source_Eclipse中查看JAVA源代码显示SOURCE NOT FOUND解决办法

    Problem:Java利用快捷键查看源代码显示Source not found 出现问题的原因:JDK目录下缺失src.zip文件只有javafx-src.zip src.zip文件:Java所有类 ...

  8. java.sql.SQLException: Value'0000-00-00'异常解决办法

    在使用MySql 时, 数据库中的字段类型是timestamp的,默认为0000-00-00, 会发生异常:java.sql.SQLException:   Value   '0000-00-00 ' ...

  9. java 大数据处理之内存溢出解决办法

    因项目中需要查询大量数据,所以导致jvm内存溢出,发现这篇博文不错,转发来共同学习 原文地址:https://www.cnblogs.com/a757956132/p/4644910.html 一.内 ...

  10. Maven compile 编译后Error:(8,31) java: 程序包com.sun.istack.internal不存在 Error:(318,57) java: 找不到符号的解决办法

    是因为代码里使用了 sun 私有包中 @NotNull注解导致,只要引入相应的sun私有包就行了!! 网上看到的解决办法:如下 KmService.java:[4,30] 错误: 程序包com.sun ...

最新文章

  1. C++ 字符数组函数与string函数
  2. Flatten Binary Tree to Linked List - LeetCode
  3. HDU - 1536 S-Nim(sg函数)
  4. debug安装包安装在别人手机上闪退?
  5. 使用 Python 和 Flask 实现 RESTful services
  6. 如何查看微信页面的源代码
  7. 鸿蒙系统的软件怎么下载,鸿蒙系统官网下载软件电脑版
  8. springcloud如何搭建支付宝pay-service微服务
  9. PDF 转 Word - 免费在线 pdf 转换成 word 文档
  10. java中交换机的作用_交换机链路聚合在网络中的作用
  11. cold start
  12. python爬取高校课程信息进行选课实战
  13. 前沿综述:细数2018年最好的词嵌入和句嵌入技术
  14. html中的长度单位
  15. AI领域算法作者及项目直播分享汇总-不断更新ing
  16. 计算机网络基础知识 - 应用层
  17. FPGA学习笔面试记录(二)——FPGA基础
  18. 立体像对空间前方交会算法
  19. ORACLE ORA-01720错误处理
  20. 图扑软件 | 数字孪生钢厂人员安全定位

热门文章

  1. ESP8266制作天气预报海藻球微景观生态缸记录(一)
  2. 部分双机热备软件详细介绍-行云管家
  3. 设计模式-工厂模式(Factory)
  4. 关于DataFactory工具使用说明(一)-----创建数据表
  5. 车载电子电源设计简单总结
  6. 前端下载zip出现文件打不开
  7. poco库开发mysql_Poco数据库操作
  8. java scanner close_Java Scanner close()方法
  9. 提高iOS开发效率的第三方框架(更新中)
  10. 挺进商用车自动驾驶,德赛西威与MAXIEYE联合发布“九逵计划”