在分布式环境中,许多服务依赖项中会出现一些不可避免地失败,比如说网络问题。Hystrix是一个库,通过添加延迟容差和容错逻辑来帮助您控制这些分布式服务之间的交互。Hystrix通过隔离服务之间的访问点,停止其间的级联故障以及提供回退选项,从而提高系统的整体弹性。本文讲述的是Feign配合Hystrix在服务不可达时进行简单容错降级处理。
1、首先都是一成不变的pom.xml引入依赖
<!-- 添加feign支持 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
<!-- 添加对hystrix断路器的依赖-->
<dependency>
<groupId>com.netflix.hystrix</groupId>
<artifactId>hystrix-core</artifactId>
<version>1.5.6</version>
</dependency>
2、zbook-web服务启动类文件添加Feign注解@EnableFeignClients
@SpringBootApplication
@EnableFeignClients
@EnableEurekaClient
public class ZbookWebApplication {
public static void main(String[] args){
SpringApplication.run(ZbookWebApplication.class,args);
}
}
3、zbook-web服务创建Feign调用接口,这个接口对接的是另外一个服务的controller,我这里用的是restFulApi
@FeignClient(name = "zbook-service",fallback = IndexServiceHystrix.class)
public interface IndexService {
@RequestMapping(value = "/indexServiceApi/indexService/{id}",method = RequestMethod.POST)
String indexServiceApi(String params, @PathVariable("id") String id);
}
对应的另外一个服务是zbook-service,controller中的requestMapping就应该是下面这样
@RestController
@RequestMapping("/indexServiceApi")
public class IndexServiceApiController {
@RequestMapping(value = "/indexService/1",method = RequestMethod.POST)
public String indexService(@RequestBody String params){
return "调用成功";
}
}
4、zbook-web服务创建服务容错降级处理类,对应@FeignClient中的fallBack,当zbook-service服务不可用或者别的异常情况时,就会进入这个类进行容错降级处理
@Service
public class IndexServiceHystrix implements IndexService {
@Override
public String indexServiceApi(String params, String id) {
return "IndexServiceHystrix 服务不可用";
}
}