• 使用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;

     

    }        

     

            

  • 相关阅读:
    python-高阶函数(map,reduce,filter)
    python-函数(补充)
    python-局部变量与全局变量
    python-函数
    字符串格式化
    pycharm2019.1激活方法(亲测可用)
    python-集合
    python-字典
    keepalivd 配置
    zabbix3 agent端安装
  • 原文地址:https://www.cnblogs.com/programer-xinmu78/p/10541083.html
Copyright © 2020-2023  润新知