• 使用redis和thread告警并避免重复告警


    spring cloud使用redis 增加监控,微服务的监控体系特别重要,这里增加了告警(使用thread异步告警),同时不能短时间内不能重复告警(使用redis避免重复)

    1、增加依赖

                <dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-data-redis</artifactId>

    </dependency>

    2、配置redis服务信息

    redis:

         database: 0

         host: 127.0.0.1

         port: 6379

         timeout: 2000

    3、使用redis

        在controller包下的类中增加

    @Autowired

    private StringRedisTemplate stringRedisTemplate;//引入redis

            

            并在saveOrderFail方法中增加监控发短信伪代码

             //增加监控报警

    String saveOrderKey="saveOrderKey";

    String sendString =stringRedisTemplate.opsForValue().get(saveOrderKey);

    //使用异步调用,启动一个异步线程,thread

    new Thread(()->{

    if (StringUtils.isBlank(sendString)){

    System.out.println(saveOrderKey+"服务存在问题,请及时处理!");

    //这里是伪代码, 实际情况为调用一个http请求调用短信服务,即可发送短信告警

    stringRedisTemplate.opsForValue().set(saveOrderKey, "save -order-fail",20, TimeUnit.SECONDS);

    //20秒内不重复发送,生产中一般使用分钟或者小时

    }

    else

    {

    System.out.println(saveOrderKey+"服务存在问题,已经告警不再重复告警!");

    }

    }).start();

            

     

    4、可以获取会话的IP地址

        在saveOrderFail的参数中增加HttpServletRequest ,同时要在save方法中增加参数HttpServletRequest

         public Object save( @RequestParam("userId") int userId,@RequestParam("productId") int productId)

            改为

    public Object save( @RequestParam("userId") int userId,@RequestParam("productId") int productId,HttpServletRequest httpServletRequest)

     

            private Object saveOrderFail(int userId,int productId)

            改为

    private Object saveOrderFail(int userId,int productId,HttpServletRequest httpServletRequest)

     

        

        增加获取IP地址并在报警信息中增加

         final String ip=httpServletRequest.getRemoteAddr();

         System.out.println(saveOrderKey+"服务存在问题,请及时处理!ip地址是:"+ip);

          

        

        方法完整代码为:

         @HystrixCommand(fallbackMethod = "saveOrderFail")

    public Object save( @RequestParam("userId") int userId,@RequestParam("productId") int productId,HttpServletRequest httpServletRequest)

    {

    Map<String,Object> msg=new HashMap<>();

    msg.put("code",0);

    msg.put("msg",productOrderFeignHystrixService.save(userId,productId));

    return msg;

    }

    private Object saveOrderFail(int userId,int productId,HttpServletRequest httpServletRequest)

    {

    //增加监控报警

    String saveOrderKey="saveOrderKey";

    String sendString =stringRedisTemplate.opsForValue().get(saveOrderKey);

    //使用异步调用,启动一个异步线程,thread

    new Thread(()->{

    if (StringUtils.isBlank(sendString)){

                        final String ip=httpServletRequest.getRemoteAddr();

                        //final String ip="localhost";

    System.out.println(saveOrderKey+"服务存在问题,请及时处理!ip地址是:"+ip);

    //这里是伪代码, 实际情况为调用一个http请求调用短信服务,即可发送短信告警

    stringRedisTemplate.opsForValue().set(saveOrderKey, "save -order-fail",20, TimeUnit.SECONDS);

    //20秒内不重复发送,生产中一般使用分钟或者小时

    }

    else

    {

    System.out.println(saveOrderKey+"服务存在问题,已经告警不再重复告警!");

    }

    }).start();

     

     

    Map<String,Object> msg=new HashMap<>();

    msg.put("code",-1);

    msg.put("msg","抢购人数太多!您被挤出来了,请稍等重试!");

    return msg;

     

    }        

     

            

  • 相关阅读:
    luogu P1613 跑路
    luogu P2047 社交网络
    luogu P2740 [USACO4.2]草地排水Drainage Ditches
    「字典树」最大异或对
    「贪心」耍杂技的牛
    「贪心」士兵
    「贪心」糖果传递
    「几何」[USACO12DEC]疯狂的栅栏Crazy Fences
    「LCA」[USACO10HOL]牛的政治Cow Politics
    「二分答案 + 前缀和」防线
  • 原文地址:https://www.cnblogs.com/programer-xinmu78/p/10541083.html
Copyright © 2020-2023  润新知