SpringCloud整合断路器的使用,用户服务异常等情况
!!所有不明白的看之前代码看前几章实战
部分一
一:加入依赖
网上新旧版本问题,所以要以官网为主,不然部分注解丢失
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
二:启动类添加注解
@SpringBootApplication
@EnableFeignClients
@EnableCircuitBreaker
public class OrderServiceApplication {
public static void main(String[] args) {
SpringApplication.run(OrderServiceApplication.class, args);
}
}
补充:注解越来越多 可以用@SpringCloudApplication注解 里面包含了这些注解
三:API接口编码
注意!方法签名一定要和api方法一致,不然会报错
在原有接口功能上稍微做更改,之前代码没变,不知道看前几章实战
@RestController
@RequestMapping("/api/v1/order")
public class OrderController {
@Autowired
private ProductOrderService productOrderService;
@RequestMapping("save")
@HystrixCommand(fallbackMethod = "saveObjectFail")
public Object save(@RequestParam("user_id")int userId,@RequestParam("product_id")int productId){
Map<String ,Object> data = new HashMap<>();
data.put("code",0);
data.put("data",productOrderService.save(userId,productId));
return data;
}
//注意,方法签名一定要和api方法一致,不然会报错
private Object saveObjectFail(int userId,int productId){
//这里可以模拟一个兜底数据
Map<String ,Object> msg = new HashMap<>();
//前端拿到code为0时表正常,-1为接口不正常
msg.put("code",-1);
msg.put("msg","抢购人数太多,您被挤出来了,请稍后重试");
return msg;
}
}
四:测试
启动eureka》启动商品服务》启动订单服务》正常访问返回订单数据–此时订单服务宕机挂掉了(这里的操作直接停掉商品服务就可以了)–重新访问订单服务接口即返回熔断方法
部分二
Fegin也是整合了hystrix
使用FeginClient接口里fallback方法
1.开启feign(注意一定要开启,旧版本默认支持,新版本关闭)
feign:
hystrix:
enabled: true
2.编写异常类 需要继承当前的回报错误的类
/**
* 针对商品服务,进行降级处理
*/
@Component
public class ProductClientFallback implements ProductClient {
@Override
public String findById(int id) {
System.out.println("fegin调用product-service findbyid异常");
return null;
}
}
3.正常接口
/**
* 商品服务客户端
*/
@FeignClient(name ="product-service",fallback = ProductClientFallback.class)//调用服务名称
public interface ProductClient {
@GetMapping("/api/v1/product/find")
String findById(@RequestParam(value = "id")int id);
}
为什么这样写:标记成FeignClient,自定义一个异常类,自定义一个接口,让spring去扫描
测试流程和上面一样
整体流程就是先进入调取服务接口,发现接口出现出现异常,返回到异常类,异常返回空,返回到控制层fallbackMethod方法给前端
测试问题
重新启动商品服务后,测试订单接口调取商品服务后发现还是提示异常。这是服务注册会发送自己的网络信息,告诉我有哪些信息,订单去注册中心定期去拿,过一段时间就可以调取到了