在之前整合降級的基礎上,整合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秒內不重復發送
