在之前整合降级的基础上,整合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秒内不重复发送
知识兔