本文共 1102 字,大约阅读时间需要 3 分钟。
今天,我在对Hystrix服务熔断验证时遇到了一个问题。服务提供方的代码如下:
@HystrixCommand(fallbackMethod = "getEmpBackup")@RequestMapping("/provider/circuit/breaker/get/emp")public ResultEntitygetEmp(@RequestParam("signal") String signal) throws InterruptedException { if ("bang".equals(signal)) { throw new RuntimeException("蹦!瞎卡拉卡!"); } if("sleep".equals(signal)) { Thread.sleep(5000); } return ResultEntity.successWithData(new Employee(666, "sam666", 666.66)); }
同时,该服务还有一个备用方法:
getEmpBackup(@RequestParam("signal") String signal) { return ResultEntity.failed("circuitbreakworkded,withsignal=" + signal+", the Exception is: ");}
在测试过程中,我发现当调用服务接口时,有时会返回超时错误。错误信息显示:
Read timed out executing GET http://atguigu-provider/provider/circuit/breaker/get/emp?signal=sleep
这提示我,问题的根源在于服务消费方的Feign配置。通过调整Feign的超时设置,可以更好地处理服务不可用情况。具体做法如下:
feign: client: config: default: connectTimeout: 10000 readTimeout: 600000
经过上述调整,并重启相关服务后,服务熔断功能正常工作。
总的来说,问题是由于Feign的默认超时时间过短,导致当服务提供端长时间未响应时,Feign抛出了超时错误。通过调整连接和读取超时参数,可以更好地捕捉和处理服务不可用的情况,从而实现服务熔断的预期效果。
转载地址:http://flmqz.baihongyu.com/