分布式服务熔断以及服务降级报警机制自定义实现思路

在熔断服务降级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;
        }
    }
}
原文地址:https://www.cnblogs.com/yangxiaohui227/p/12508860.html