标签:vol temp ack tco 出现 服务 ping auto 实现
hystrix是Netflix公司实现的一个熔断库,spring 把它集成到spring cloud微服务解决方案中。当级联请求中的某个服务出现故障(如:阻塞)时可以自动切断当前服务,暂停对外提供服务。当服务恢复正常时,自动放开当前服务。
当调用一个特定服务,默认10(circuitBreaker.requestVolumeThreshold)秒内,此服务被调用超过20次(circuitBreaker.requestVolumeThreshold),并且错误率超过50%(circuitBreaker.errorThresholdPercentage),那么断路器就打开,阻止此服务对外提供服务,禁止外部调用,此时如果开发者提供了其它回调方法,可以调用备用的回调方法,以替代原服务。断路器保持打开状态一段时间(默认5秒),然后切换到半打开状态(HALF-OPEN),即先放进来一个请求,检查此次请求是否成功,如果本次请求仍然失败,说明服务没有恢复,断路器继续保持开路状态(OPEN)。如果本次请求成功,说明服务已恢复,则关闭断路器,把服务重新加入到整个服务链中。
hystrix的断路机制,可以直接阻制新请求,也可以提供一种备选方案,即:如果断路原请求时,可以调用开发者提供的备用回调方法,以返回其它替代数据(如:表态数据,或其它失败信息),相当于降级处理。
与ribbon集成时注意事项当使用 Hystrix commands 封装 Ribbon clients 时,要确认Hystrix的超时配置一定必须Ribbon的超时长,以及可能潜在的重复次数。
例如: 如果Ribbon的超时时间是1秒,并且 Ribbon的重试次数是3次,那么Hystrix的超时时间至少是3秒。
@HystrixCommand(fallbackMethod = "helloFallback"){ribbon例子}: @HystrixCommand(fallbackMethod = "helloFallback") public String port(){ return restTemplate.getForObject("http://PROVIDER/test", String.class); } public String helloFallback() { return "error"; }
feign如何集成hystrix:hystrix对应的类位于classpath以及feign.hystrix.enabled=true,feign会自动把使用@FeignClienti注解的类中所有方法都封装成
具有hystrix功能的bean.由于@FeignClient自动集成hystrix,所以通过@FeignClient的属性来配置故障回调类
@RestController public class TestController { @Autowired TestService testService; @RequestMapping(value = "/test", method = RequestMethod.GET) public String helloConsumer() { //调用了绑定PROVIDER服务接口的客户端向服务发起/test接口的调用 return testService.test(); } } @FeignClient(name = "PROVIDER",fallback = FallbackTest.class) public interface TestService { //绑定具体服务的REST接口 @RequestMapping("/test") String test(); } //从@HystrixCommand(fallbackMethod)中的回调方法转换成回调类 @Component public class FallbackTest implements TestService{ @Override public String test() { return "fallback"; } }
标签:vol temp ack tco 出现 服务 ping auto 实现
原文地址:https://www.cnblogs.com/rainsakura/p/10408316.html