项目地址: 链接:https://pan.baidu.com/s/1Mxo0ltvZbpz_r8mCU-mSpw 
提取码:3j4a

问题答疑:

Hystrix服务保护框架,在微服务中Hystrix能够为我们解决哪些问题?
        1.断路器
        2.服务降级
        3.服务熔断
        4.服务隔离机制
        5.服务雪崩效应 连环雪崩效应 如果严重的话,可能会导致整个微服务接口无法访问,所有服务器都会瘫痪.

基于Hystrix解决服务雪崩效应原理:
        服务降级
            1.在高并发的情况下,防止用户一直等待.使用服务降级方式(返回一个友好的提示直接给客户端,不会去处理请求,调用fallBack)
                  目的是为了用户体验.
            2.场景:秒杀-----当前请求人数过多,请稍后尝试. (在tomcat中没有线程进行处理客户端请求的时候,不应该让用户一直转圈等待)
            3.如果调用其他接口超时的时候(默认是1秒时间),如果在一秒钟没有及时响应返回的话,(默认情况下业务逻辑是可以执行的)则直接执行服务降级.
        服务隔离机制
            服务熔断目的是为了保护服务,在高并发情况下,如果请求达到了一定的极限(可以自己设置阈值).如果流量
            超出了设置的阈值,自动开启保护服务功能,使用服务降级方式返回友好提示.熔断机制和服务降级一起使用.
        服务熔断
            隔离方式线程池和信号量隔离.
            线程池隔离:每个服务接口都有自己独立的线程池,每个线程池互不影响,缺点:CPU占用率非常高.不是所有
                       的接口都去采用线程池隔离,核心关键接口.

源码地址 : 链接:https://pan.baidu.com/s/17-cFGA3fJFLF8gcnDZdWXg 
提取码:1q9z   具体见解压说明文件

1.先说常用和推荐使用的一种方式: 定义统一fallback接口

1.pom.xml依赖

<!--Hystrix断路器-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>

2.application.properties配置文件

#指定运行端口
server.port=8200
#服务名称
spring.application.name=order
#获取注册实例列表
eureka.client.fetch-registry=true
#注册到Eureka的注册中心
eureka.client.register-with-eureka=true
#配置注册中心地址
#eureka.client.zhang.service-url.defaultZone=http://localhost:8001/eureka/
eureka.client.service-url.defaultZone=http://localhost:8000/eureka/#feign客户端建立连接超时时间
feign.client.config.default.connect-timeout=10000
#feign客户端建立连接后读取资源超时时间
feign.client.config.default.read-timeout=10000#开启Hystrix断路器
feign.hystrix.enabled=true
#配置Hystrix 超时时间   超时关闭
#hystrix.command.default.execution.timeout.enabled=false
#超时时间(默认1000ms)在调用方配置,被该调用方的所有方法的超时时间都是该值,优先级低于下边的指定配置
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=3000
#在调用方配置,被该调用方的指定方法(HystrixCommandKey方法名)的超时时间是该值
hystrix.command.HystrixCommandKey.execution.isolation.thread.timeoutInMilliseconds=4000
#线程池核心线程数 默认为10
hystrix.threadpool.default.coreSize=10
#最大排队长度。默认-1  如果要从-1换成其他值则需重启,即该值不能动态调整,若要动态调整,需要使用到下边这个配置
hystrix.threadpool.default.maxQueueSize=100
#排队线程数量阈值,默认为5,达到时拒绝,如果配置了该选项,队列的大小是该队列
hystrix.threadpool.default.queueSizeRejectionThreshold=5
# 简言之,10s内请求失败数量达到20个,断路器开。  当在配置时间窗口内达到此数量的失败后,进行短路。默认20个
hystrix.command.default.circuitBreaker.requestVolumeThreshold=20
#短路多久以后开始尝试是否恢复,默认5s
hystrix.command.default.circuitBreaker.sleepWindowInMilliseconds=5
#出错百分比阈值,当达到此阈值后,开始短路。默认50%
hystrix.command.default.circuitBreaker.errorThresholdPercentage=50%
#调用线程允许请求HystrixCommand.GetFallback()的最大数量,默认10。超出时将会有异常抛出,注意:该项配置对于THREAD隔离模式也起作用
hystrix.command.default.fallback.isolation.semaphore.maxConcurrentRequests=50000

3.定义Feign调用接口,和新建统一fallback处理类并实现Feign调用接口

@FeignClient(value = "member",fallback = MemberServiceFallback.class)
public interface MemberServiceFeign extends IMemberService {//此处为方便调用member服务的接口,采用直接继承member服务接口  不易写错且减少代码量//@FeignClient(value = "member",fallback = MemberServiceFallback.class)//value值为被调用服务名   fallback 值为 统一定义的fallback 类}
@Component
public class MemberServiceFallback implements MemberServiceFeign {@Overridepublic UserEntity getMember(String name) {return null;}//服务降级友好提示@Overridepublic ResultVO getUserinfo() {return new ResultVO(StatusCode.RESULT_SUCCESS,"服务器忙!请稍后重试!!!");}
}

4.启动类

@SpringBootApplication
@EnableEurekaClient  //开启eureka客户端
@EnableFeignClients //开启feign调用
@EnableHystrix  //开启hystrix
public class AppOrder {public static void main(String[] args) {SpringApplication.run(AppOrder.class, args);}
}

5.Feign调用服务降级测试接口(被调用member服务接口实现,睡眠5秒,配置超时3秒,故会超时)

@RestController
public class OrderServcieImpl implements IOrderService {@Autowiredprivate MemberServiceFeign memberServiceFeign;//hystrix第二种写法,使用类方式@RequestMapping("/orderToMemberUserInfoHystrixDemo02")public ResultVO orderToMemberUserInfoHystrixDemo02() {System.out.println("orderToMemberUserInfoHystrixDemo02: 线程池名称:"+Thread.currentThread().getName());return memberServiceFeign.getUserinfo();}
}
@Override
@RequestMapping("/getUserinfo")
public ResultVO getUserinfo() {try {Thread.sleep(5000);}catch (Exception e){e.printStackTrace();}return new ResultVO(StatusCode.RESULT_SUCCESS,"订单服务接口调用会员服务接口成功...."+serverPort);}
}

6.启动eureka member  order 等服务,测试

2.@HystrixCommand注解方式

1.pom.xml文件  application.properties配置文件  启动类   同方法一   Feign调用服务接口 不要fallback

2.测试代码

    //解决服务雪崩效应  hystrix有两种方式配置保护服务 通过注解和接口形式//fallbackMethod 方法的作用:服务降级执行//@HystrixCommand 默认开启了线程池隔离方式 ,服务降级,服务熔断@HystrixCommand(fallbackMethod = "orderToMemberUserInfoHystrixFallbackMethod")@RequestMapping("/orderToMemberUserInfoHystrix")public ResultVO orderToMemberUserInfoHystrix() {System.out.println("orderToMemberUserInfoHystrix: 线程池名称:"+Thread.currentThread().getName());return memberServiceFeign.getUserinfo();}//服务降级处理方法public ResultVO orderToMemberUserInfoHystrixFallbackMethod(){return new ResultVO(StatusCode.RESULT_SUCCESS,"返回友好提示:服务降级 !!! 服务器忙,请稍后重试!!!!");}

3.启动服务,调用接口测试

Hystrix服务降级的两种处理方式@HystrixCommand注解和定义统一fallback接口相关推荐

  1. nacos实现服务注册与两种消费方式

    nacos实现服务注册与两种消费方式 运行nacos 服务注册实例 两种服务消费方式 RestTemplet Feign 测试 参考 运行nacos 预备环境:64位操作系统.64位JDK1.8+.M ...

  2. android启动服务的生命周期,Android Service的两种启动方式以及生命周期

    Service的两种启动方式: 1.startService 2.bindService 注意: .在Android 5.0之后google出于安全的角度禁止了隐式声明Intent来启动Service ...

  3. Hystrix服务降级、熔断-微服务(十)

    服务降级 降级配置 @HystrixCommand 8001先从自身找问题 设置自身调用超时时间的峰值,峰值内可以正常运行, 超过了需要有兜底的方法处理,作服务降级fallback 8001fallb ...

  4. 微服务(八)——Hystrix服务降级、熔断、限流(上)

    目录 Hystrix服务降级.熔断.限流 Hystrix是什么 Hystrix停更进维 Hystrix的服务降级熔断限流相关概念 Hystrix支付微服务构建 JMeter高并发压测后卡顿 订单微服务 ...

  5. Spring Cloud构建微服务架构:服务容错保护(Hystrix服务降级)【Dalston版】

    前言 在微服务架构中,我们将系统拆分成了一个个的服务单元,各单元应用间通过服务注册与订阅的方式互相依赖.由于每个单元都在不同的进程中运行,依赖通过远程调用的方式执行,这样就有可能因为网络原因或是依赖服 ...

  6. Spring Cloud构建微服务架构:服务容错保护(Hystrix服务降级)【Dalston版】 1

    前言 在微服务架构中,我们将系统拆分成了一个个的服务单元,各单元应用间通过服务注册与订阅的方式互相依赖.由于每个单元都在不同的进程中运行,依赖通过远程调用的方式执行,这样就有可能因为网络原因或是依赖服 ...

  7. Hystrix 服务降级和熔断

    Hystrix 服务降级和服务熔断 文章目录 Hystrix 服务降级和服务熔断 1.问题的提出 2.Hystrix 3.服务降级 3.1 服务降级实操 3.2 服务降级之客户端 3.3 总结 4.服 ...

  8. redis的两种持久化方式详解

    一.背景 在实际开发中,为了保证数据的完整性,防止数据丢失,我们除了在原有的传统数据库保存数据的同时,最好是再用redis持久化再保存一次数据.如果仅仅是使用redis而不进行持久化配置的话,当red ...

  9. (转)javabean是什么和总结javabean的两种使用方式

    一. javabean 是什么? Javabean 就是一个类,这个类就定义一系列 get<Name> 和 set<Name> 方法. So simple ! Javabean ...

最新文章

  1. 通过setTimeout处理click,dblclick,mousedown等事件的冲突
  2. android gradle is插件,android gradle 插件创建 configuration
  3. 四位先行进位电路逻辑表达式_数字电子技术考试卷以及答案(4套)
  4. jQuery插件AjaxFileUpload文件上传实现Javascript多文件上传功能
  5. 5G NR RLC:PDU Parameters
  6. 【MATLAB统计分析与应用100例】案例009:创建一个RandStream类对象,调用其randn方法生成标准正态分布随机数
  7. cad动态块制作翻转_定制橱柜家具中CAD门型动态块制作方式图文讲解加视频
  8. R语言学习笔记(一)R语言的基本操作与函数
  9. python print format_Python中的format格式化输出
  10. apply_async进程不执行_[粉丝问答6]子进程进程的父进程关系
  11. $smary模板缓存
  12. 编译DXperience 7.1源码和升级原有的应用程序
  13. 免费的音频视频压缩工具和方法
  14. R语言绘图:直方图——hist
  15. R语言使用ggplot2包使用geom_density()函数绘制分组密度图(填充色配置、半透明填充色、添加均值线)实战(density plot)
  16. 跑步机上的精彩人生——Linus大神传奇
  17. curly怎么读(curly怎么读音发音英语怎么说)
  18. Generalized Focal Loss
  19. java 面试题合集_撩课-Java面试题合辑1-50题
  20. speedoffice使用方法——Word如何设置段落背景颜色

热门文章

  1. Google Play通话记录和短信权限使用限制
  2. 新课程背景下的教师专业发展问题及其对策
  3. k8s资源之service
  4. 【做题笔记】P2327 [SCOI2005]扫雷
  5. 【WSN】基于COMPOW协议下的网络连通率和覆盖率附matlab代码
  6. 网狐荣耀需要什么服务器系统,网狐荣耀服务器负载均衡
  7. 支付宝体验设计精髓. 02 无规矩不成方圆
  8. Python爬取京东笔记本电脑,来看看那个牌子最棒!
  9. Pandas DataFrame四种写入方法效率对比
  10. 实战 J2EE 开发购物网站 开发环境篇