zoukankan      html  css  js  c++  java
  • 分布式服务熔断以及服务降级报警机制自定义实现思路

    在熔断服务降级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;
            }
        }
    }
  • 相关阅读:
    Go语言并发编程
    Go语言package
    大数据实践(十) Spark多种开发语言、与Hive集成
    大数据实践(九)--sqoop安装及基本操作
    Go语言错误处理
    Go语言接口
    Go语言面向对象
    数据库基础了解
    PL/SQL语句快捷输入设置
    重载操作符介绍
  • 原文地址:https://www.cnblogs.com/yangxiaohui227/p/12508860.html
Copyright © 2011-2022 走看看