微服务架构搭建熔断有三种方式。
第一种:
1、引入pom.xml依赖:
<!-- 熔断 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
2、在启动类上加上注解:@EnableHystrix
3、声明接口:
@HystrixCommand(fallbackMethod = "selectByIdError")
@RequestMapping("/getuser")
public ResponseResult selectById(int id) {
return userService.selectById(id);
}
public ResponseResult selectByIdError(int id){
return new ResponseResult(10000,"内部服务出现异常",null);
}
第二种
1、引入熔断依赖
2、Feign自带熔断,需要手动打开
feign:
hystrix:
enabled: true
3、定义Fallback类实现feign接口
@Component
@Slf4j
public class OrderClientFallback implements UserService{
@Override
public void updatePoint(int price, int id) {
log.info("======进入熔断处理======");
log.info("调用用户服务的更新积分API失败");
}
@Override
public ResponseResult<User> selectById(int id) {
return null;
}
}
第三种
1、引入熔断依赖
2、Feign自带熔断,需要手动打开
3、定义一个熔断工厂类实现FallbackFactory接口,并定义好需要熔断处理的Feign接口泛型。
@Component
@Slf4j
public class OrderClientFallbackFactory implements FallbackFactory<UserService> {
@Override
public UserService create(Throwable cause) {
//打印熔断原因
cause.printStackTrace();
//返回一个工厂类型对象
return new UserService(){
@Override
public void updatePoint(int price, int id) {
log.info("======进入熔断处理======");
log.info("调用用户服务的更新积分API失败");
}
@Override
public ResponseResult<User> selectById(int id) {
return null;
}
};
}
}