在熔断服务降级fallback接口进行短信通知,使用redis每5分钟通知一次,添加线程池可以更高效
demo:
@FeignClient( name = "order-server", fallback = ShopOrderDetailInterface.DefaultFallback.class ) public interface ShopOrderDetailInterface { @RequestMapping(value = {"/shop/order/detail"},method = {RequestMethod.POST}) @ResponseBody ShopOrderDetailResponseDTO processRequest(@RequestBody ShopOrderDetailRequestDTO requestDTO); @Component class DefaultFallback implements ShopOrderDetailInterface { @Override public ShopOrderDetailResponseDTO processRequest(ShopOrderDetailRequestDTO requestDTO) { //如果请求参数注入HttpRequest,这里也可以获取到ip地址,这样当服务熔断了,可以短信通知,哪个机器发生了熔断 String value=redisTemplate.get("order.fallback"); if(StringUtils.isBlank(value)){ //此处可以使用线程池 new Thread(()->{ System.out.println("发送短信通知。。。订单服务已经被熔断了。。。"); //此处调用发短信接口TODO 省略 redisTemplate.set("order.fallback","tag",5, TimeUnit.MINUTES);//5分钟后失效 }).start(); }else { System.out.println("服务被熔断了。。。。"); } return responseDTO; } } }