91名师指路-头部
91名师指路

Hystrix 熔断

由于某些原因,现在不支持支付宝支付,如需要购买源码请加博主微信进行购买,微信号:13248254750

前提:我们有微服务A和 B。

效果:我们在微服务A中调用B,如果B服务挂了,此时返回给我们错误信息。

1 引入jar

<!-- hystrix -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>

2 在启动类上加上注解 @EnableCircuitBreaker

3 代码如下。控制层。

@ApiOperation(value="查询用户")
@ResponseBody
@GetMapping(value="/selectUser")
public ReturnMsgUtils selectUser() throws IOException{
// 1 外部调用
ReturnMsgUtils obj=clientIdcardService.selectCandidateInfo();
System.out.println(obj);
if(obj.getCode()==301) {
throw new BusinessException(301, "崩溃了");
}

// 2
ReturnMsgUtils msg=null;
List<User> userList=userService.selectUser();
if(null==userList || userList.size()==0) {
throw new BusinessException(100, "未查询到数据");
} else {
msg=new ReturnMsgUtils(BusinessUtils.BUSINESS_CODE_200, BusinessUtils.BUSINESS_MSG_200, userList);
}
return msg;
}

4 service层

@FeignClient(value = "MICROSERVICE-CANDIDATE", fallbackFactory=ClientIdcardServiceFactory.class)
public interface ClientIdcardService {

@GetMapping(value = "/idcard/selectCandidateInfo")
public ReturnMsgUtils selectCandidateInfo();


}

5 service实现层

@Component
public class ClientIdcardServiceFactory implements FallbackFactory<ClientIdcardService>{

@Override
public ClientIdcardService create(Throwable cause) {
return new ClientIdcardService() {
@Override
public ReturnMsgUtils selectCandidateInfo() {
ReturnMsgUtils msg=new ReturnMsgUtils(301, "出大事了,服务器崩溃了");
return msg;
}
};
}



}

注意:实现层一定要加上 @Component 注解

6 测试:

我们停掉服务B,在请求。提示了我们预期的结果。


2019-08-23 11:08:16     阅读(879)

名师出品,必属精品    https://www.91mszl.com

联系博主    
用户登录遮罩层
x

账号登录

91名师指路-底部