zoukankan      html  css  js  c++  java
  • SpringCloud之异常报警通知(八)

    在之前整合降级的基础上,整合redis,达到报警的效果(redis的启动还是之前boot里面整合的redis)

    • order-service

      • pom.xml

         <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-data-redis</artifactId>
          </dependency>
      • application.yml

        spring:
          application:
            name: order-service
          redis:
            port: 6379
            host: 192.168.180.113
            timeout: 2000
      • 修改web层,添加redis的逻辑

         1 @RestController
         2 @RequestMapping("/api/v1/order")
         3 public class OrderController {
         4  5  6     @Autowired(required = false)
         7     private ProductOrderServiceImpl productOrderService;
         8  9     @Autowired
        10     private StringRedisTemplate redisTemplate;
        11 12 13     @RequestMapping("/save")
        14     @HystrixCommand(fallbackMethod="saveOrderFail")
        15     public Object save(@RequestParam("user_id")int userId, @RequestParam("product_id") int productId, HttpServletRequest request){
        16 17         Map<String, Object> data = new HashMap<>();
        18         data.put("code", 0);
        19         data.put("data", productOrderService.save(userId, productId));
        20         return  data;
        21     }
        22 23 24     //注意,方法签名一定要要和api方法一致
        25     private Object saveOrderFail(int userId, int productId, HttpServletRequest request){
        26 27 28         //监控报警
        29         String saveOrderKye = "save-order";
        30 31         String sendValue = redisTemplate.opsForValue().get(saveOrderKye);
        32         final String ip = request.getRemoteAddr();
        33         new Thread( ()->{
        34             if (StringUtils.isBlank(sendValue)) {
        35                 System.out.println("紧急短信,用户下单失败,请离开查找原因,ip地址是="+ip);
        36                 //发送一个http请求,调用短信服务 TODO
        37                redisTemplate.opsForValue().set(saveOrderKye, "save-order-fail", 20, TimeUnit.SECONDS);
        38             }else{
        39                 System.out.println("已经发送过短信,20秒内不重复发送");
        40             }
        41 42         }).start();
        43 44 45         Map<String, Object> msg = new HashMap<>();
        46         msg.put("code", -1);
        47         msg.put("msg", "抢购人数太多,您被挤出来了,稍等重试");
        48         return msg;
        49     }
        50 51 52 }
      • 测试:

     

    2019-10-19 20:56:11.880  INFO 20020 --- [erListUpdater-0] c.netflix.config.ChainedDynamicProperty  : Flipping property: product-service.ribbon.ActiveConnectionsLimit to use NEXT property: niws.loadbalancer.availabilityFilteringRule.activeConnectionsLimit = 2147483647
    feign 调用product-service findbyid 异常
    2019-10-19 20:56:12.771  INFO 20020 --- [ HystrixTimer-1] io.lettuce.core.EpollProvider            : Starting without optional epoll library
    2019-10-19 20:56:12.774  INFO 20020 --- [ HystrixTimer-1] io.lettuce.core.KqueueProvider           : Starting without optional kqueue library
    已经发送过短信,20秒内不重复发送
  • 相关阅读:
    Linux常用命令
    cookie机制、session机制
    http状态码、错误分析
    安装“Microsoft SQL Server 2014 Management Objects”时报错"Error Writing to file: Microsoft.SqlServer.XEvent.Linq.dll."
    Installshield build all installer in development computer
    C++使用RabbitMQ类库做客户端与RabbitMQ Server通讯,生成C++可调用的rabbimq.*.dll的过程
    由hibernate配置cascade而导致的软件错误,并分析解决此问题的过程
    由hibernate配置inverse="true"而导致的软件错误,并分析解决此问题的过程
    JVM原理解析
    Add lombok to IntelliJ IDEA
  • 原文地址:https://www.cnblogs.com/dalianpai/p/11705238.html
Copyright © 2011-2022 走看看