• Hystrix实操


    1.依赖
      <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>
    
    2.降级示例:
    请求端:cloud-hystrim-order80
    
    主启动类
    @EnableFeignClients()
    @SpringBootApplication
    @EnableHystrix
    public class OrderHystrimMain80 {
        public static void main(String[] args) {
            SpringApplication.run(OrderHystrimMain80.class,args);
        }
    }
    
    
    超时测试:
        //Hystrim >test
        @GetMapping("/timeOut/{id}")
        public String timeOut(@PathVariable("id") Integer id) throws InterruptedException {
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
          String sssss=  paymentFeginService.payment_timeOut(id);
            log.info(">>>>>>>>>>>>>>>>>>ssssss:"+sssss);
            return  sssss ;
    
        }
    
    调用远程出:
    @Component
    @FeignClient(value = "CLOUD-PAYMENT-SERVER",fallback = PaymentFeginServiceFallback.class)
    public interface PaymentFeginService {
        @GetMapping("/payment/selectOne/{id}")
         CommonResult selectOne(@PathVariable(name = "id") Integer id);
    
        @GetMapping("/payment/timeOut")
         CommonResult timeOut();
    
        @GetMapping("/payment/payment_timeOut/{id}")
        String payment_timeOut(@PathVariable("id") Integer id);
    
        @GetMapping("/payment/get/zipkin")
         String  getZipkin();
    
    }
    
    PaymentFeginServiceFallback:这个类是请求端做的降级处理
    
    @Component
    public class PaymentFeginServiceFallback implements PaymentFeginService {
        @Override
        public CommonResult selectOne(Integer id) {
            return new  CommonResult(404,"客户端超时了:",null);
        }
    
        @Override
        public CommonResult timeOut() {
            return new  CommonResult(404,"客户端超时了:",null);    }
    
        @Override
        public String payment_timeOut(Integer id) {
            return "客户端超时了:" ; }
    
        @Override
        public String getZipkin() {
            return "测试链路返回";
        }
    }
    
    降级服务端示例:
    
        @GetMapping("/payment_timeOut/{id}")
        public String payment_timeOut(@PathVariable("id") Integer id) {
            String result = paymentService.payment_timeOut(id);
            log.info("<<<<<<<<"+result);
            return result;
    
        }
    
    
    //超过3s就调用pay_timeOutHandler方法进行降级
        @HystrixCommand(fallbackMethod ="pay_timeOutHandler",commandProperties = { 
                 @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds",value = "3000")})
        public String   payment_timeOut(Integer id){
            int num=6000;
            try {
                Thread.sleep(num);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return  "线程池:"+Thread.currentThread().getName()+":id:"+id;
        }
    
    //服务端降级
        public  String pay_timeOut(Integer id){
            return  "线程池:"+Thread.currentThread().getName()+":超时了:"+id;
        }
    
    3.0
    服务端熔断示例:
    @SpringBootApplication
    @EnableEurekaClient
    @EnableCircuitBreaker  //主要注解
    public class PaymentHistrixMain8001 {
        public static void main(String[] args) {
            SpringApplication.run(PaymentHistrixMain8001.class, args);
        }
    
    
    
    
    
     //服务熔断  开启熔断器,请求次数超过10次,10s内,错误率达到60然后进行跳闸熔断,服务恢复正常后,继续调用链调用,不会出现降级后不可用情况(这里小于0抛异常,大于0请求真正常)
        @HystrixCommand(fallbackMethod ="paymentC ircuitBreak_fallback",commandProperties = {
                @HystrixProperty(name = "circuitBreaker.enabled",value = "true"),//是否开启断路器
                @HystrixProperty(name = "circuitBreaker.requestVolumeThreshold",value = "10"),//请求次数
                @HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds",value ="10000"),//时间窗口期
                @HystrixProperty(name = "circuitBreaker.errorThresholdPercentage",value = "60")//失败率达到多少后跳闸
        })
        @GetMapping("/circuit/{id}")
        public String paymentCrircuitBreaker(@PathVariable("id")Integer id){
            if(id<0){
                throw new RuntimeException("******id不能为负数");
            }
            String sss= UUID.randomUUID().toString();
            return Thread.currentThread().getName()+"调用成功:"+sss;
        }
    
  • 相关阅读:
    Linq to sql与EF零碎知识点总结
    个人总结js客户端验证
    asp.net、mvc、ajax、js、jquery、sql、EF、linq、netadvantage第三方控件知识点笔记
    c#、sql、asp.net、js、ajax、jquery大学知识点笔记
    ActiveMQ 事务和XA
    三次握手“释放”连接
    ActiveMQ 集群和主从
    ActiveMQ 配置jdbc主从
    ActiveMQ 的连接和会话
    ActiveMQ 处理不同类型的消息
  • 原文地址:https://www.cnblogs.com/wangbiaohistory/p/16120139.html
Copyright © 2020-2023  润新知