原 Hystrix 熔断
版权声明:本文为博主原创文章,请尊重他人的劳动成果,转载请附上原文出处链接和本声明。
本文链接:https://www.91mszl.com/zhangwuji/article/details/1039
前提:我们有微服务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
博主信息