1 .先从8001自身找问题:设置自身调用超时时间的峰值,峰值内可以正常运行,超时了需要有兜底的方法处理,作服务降级fallback
在服务端cloud-provider-hystrix-payment8001工程中设置超时,消费者去调用
第一步:
/** * 让线程睡眠5秒再执行方法,超时就去执行timeoutHandler方法返回 , @HystrixProperty设置该方法在3秒内执行 * 目的让方法执行延迟去执行timeoutHandler方法 */ @HystrixCommand(fallbackMethod ="timeoutHandler",commandProperties = { @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds",value = "3000") }) @GetMapping("/admin/findPaymentList") public CommonResult findPaymentList(){ try { Thread.sleep(5000); }catch (Exception e){ } List<Payment> paymentList = paymentService.findPaymentList(); log.info("查询所有数据"); if(paymentList!=null){ return new CommonResult(200,"查找数据成功",paymentList); } return new CommonResult(400,"没有对应的记录"); } //超时需要执行的方法 public CommonResult timeoutHandler(){ return new CommonResult(400,"服务正忙,请稍后再试"); }
第二步:主启动加上@EnableCircuitBreaker //激活hystrix
第三步:测试,启动服务端8001,消费端cloud-consumer-feign-hystrix-order80,调用findPaymentList()方法
消费端通过接口OpenFeign调用,查看执行返回我们所设置超时的方法
异常同理
80订单消费端,可以更好的保护自己,依样进行客户端降级保护 cloud-consumer-feign-hystrix-order80工程
第一步:在yml文件中配置
#启用hystrix feign: hystrix: enabled: true
第二步:在主启动类上加注解@EnableHystrix
第三步:controller代码
/** * 1.5秒内如果返回则OK,否则执行timeoutHandler方法返回友好提示 * @return */ @HystrixCommand(fallbackMethod ="timeoutHandler",commandProperties = { @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds",value = "1500") }) @GetMapping("/consumer/findPaymentList") public CommonResult findPaymentList(){ log.info("查询所有数据"); return orderService.findPaymentList(); } //超时需要执行的方法 public CommonResult timeoutHandler(){ return new CommonResult(400,"消费端服务正忙,请稍后再试"); }
第四步:测试