SpringCloud之异常报警通知(⼋)
在之前整合降级的基础上,整合redis,达到报警的效果(redis的启动还是之前boot⾥⾯整合的redis)
order-service
pom.xml
org.springframework.boot
spring-boot-starter-data-redis
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 data = new HashMap<>();18 data.put(\"code\);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\, TimeUnit.SECONDS);38 }else{
39 System.out.println(\"已经发送过短信,20秒内不重复发送\");40 }41 42 }).start();43 44 45 Map msg = new HashMap<>();46 msg.put(\"code\);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 = 21474837feign 调⽤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秒内不重复发送