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秒內不重復發送

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM