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秒内不重复发送
知识兔
计算机