3.3:降级报警通知以及Hystrix降级策略调整

一. 为服务添加报警

  1. pom.xml添加redis依赖

<dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-data-redis</artifactId>

</dependency>

 

  1. 在application.yml中添加配置

redis:

  database: 0

  host: 127.0.0.1

  port: 6379

  timeout: 2000

 

  1. 在@HystrixCommand(fallbackMethod = "saveOrderFail")的fallbackMethod方法中做报警处理

@RestController

@RequestMapping("api/v1/order")

public class OrderController {

 

    @Autowired

    private ProductOrderService productOrderService;

 

    @Autowired

    private StringRedisTemplate redisTemplate;

 

    @RequestMapping("save")

    @HystrixCommand(fallbackMethod = "saveOrderFail")

    public Object save(@RequestParam("user_id")int userId, @RequestParam("product_id") int productId, HttpServletRequest request){

        Map<String, Object> data = new HashMap<>();

        data.put("code", 0);

        data.put("data", productOrderService.save(userId, productId));

        return  data;

    }

 

    //注意,方法签名一定要要和api方法一致

    private Object saveOrderFail(int userId, int productId, HttpServletRequest request){

        //监控报警

        String saveOrderKye = "save-order";

        //根据key在redis中取值

        String sendValue = redisTemplate.opsForValue().get(saveOrderKye);

        final String ip = request.getRemoteAddr();

        new Thread( ()->{

            if (StringUtils.isBlank(sendValue)) {

                System.out.println("紧急短信,用户下单失败,请离开查找原因,ip地址是="+ip);

                // TODO: 2019/3/4 发送一个http请求,调用短信服务  

                //向redis中设置值,倒数第一个参数是超时时间的单位,倒数第二个是值

                redisTemplate.opsForValue().set(saveOrderKye, "save-order-fail", 20, TimeUnit.SECONDS);

            }else{

                System.out.println("已经发送过短信,20秒内不重复发送");

            }

        }).start();

        Map<String, Object> msg = new HashMap<>();

        msg.put("code", -1);

        msg.put("msg", "抢购人数太多,您被挤出来了,稍等重试");

        return msg;

    }

 

}

 


二. Hystrix降级策略调整

  1. 官方文档:https://github.com/Netflix/Hystrix/wiki/Configuration#execution.isolation.strategy

  2. 查看默认讲解策略 HystrixCommandProperties

    1. execution.isolation.strategy   隔离策略

      1. THREAD 线程池隔离 (默认)

      2. SEMAPHORE 信号量:信号量适用于接口并发量高的情况,如每秒数千次调用的情况,导致的线程开销过高,通常只适用于非网络调用,执行速度快

    2. execution.isolation.thread.timeoutInMilliseconds  超时时间,默认1000ms

    3. execution.timeout.enabled 是否开启超时限制 (一定不要禁用)

    4. execution.isolation.semaphore.maxConcurrentRequests 隔离策略为 信号量的时候,如果达到最大并发数时,后续请求会被拒绝,默认是10

  3. 调整策略

 

超时时间调整:

hystrix:

  command:

    default:

      execution:

        isolation:

          thread:

            timeoutInMilliseconds: 4000

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值