zoukankan      html  css  js  c++  java
  • 010 Hystrix使用

    一 .概述

    在本次,我们会分成下面的两个部分记性Hystrix的介绍.

    [1]Ribbon+RestTemplate的使用

    [2]Feign的使用

    二 .Ribbon的使用

    [1]添加依赖包

            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
            </dependency>

    [2]启动类改造

    @EnableCircuitBreaker

    添加上述的注解

    [3]修改微服务的调用.

        @HystrixCommand(fallbackMethod="queryUserHystrix")
        @GetMapping("user/{id}")
        public User queryUser(@PathVariable("id") int id) {
            return restTemplate.getForObject("http://cloud-producer/user/"+id, User.class);
        }
        
        public User queryUserHystrix(int id) {
            return new User(-666,"trek","no server");
        }

    我们在方法的调用上面添加了一个注解,其中我们指定了fallback方法.

    环境的验证处理:

    我们启动eureka和consumer,此时服务的提供者是不存在的,因此我们的调用一定出出现问题.

    我们看看加入了Hystrix之后,我们的调用的情况是怎么样的.

    我们发现现在我们的微服务实现了容错的功能.

    三 .Feign之中Hystrix的使用.

    [1]添加依赖

    [2]修改启动类

    [3]修改配置文件的内容

    feign:
      hystrix:
        enabled: true

    [4]添加fallback方法

    @FeignClient(value="cloud-producer",fallback=UserHystrix.class)
    public interface UserFeign {
        
        @GetMapping("/user/{id}")
        User queryUserByid(@PathVariable("id") int id) ;
    }

    一旦出现问题,就会回调上面的配置类.

    @Component
    public class UserHystrix implements UserFeign{
    
        @Override
        public User queryUserByid(int id) {
            return new User(-666,"trek","no server");
        }
    
    }

    此外,springcloud也为我们提供了另外的一种方式,实现FallBackFactory,这样可以获取异常信息.

    @FeignClient(value="cloud-producer",fallbackFactory=UserHystrixFactory.class)
    public interface UserFeign {
        
        @GetMapping("/user/{id}")
        User queryUserByid(@PathVariable("id") int id) ;
    }

    此时,我们添加的fallback为一个工厂对象.

    @Component
    public class UserHystrixFactory implements FallbackFactory<UserFeign>{
    
        @Override
        public UserFeign create(Throwable throwable) {
            return new UserFeign() {
    
                @Override
                public User queryUserByid(int id) {
                    System.out.println(throwable);
                    return new User(-666,"trek","no server");
                }
                
            };
        }
    
    }
  • 相关阅读:
    jquery ajax和php实现返回值 json类型
    jQuery一句话实现多选框全选/取消
    九宫格拼图 支持44 55等
    php通过$_SERVER['HTTP_USER_AGENT']获取浏览器useAgent
    微信刮刮卡代码
    从QQ网站中提取的纯JS省市区三级联动
    Codeigniter+PHPExcel导出数据到Excel文件
    flv视频播放器停止时带图片
    html5+js实现刮刮卡效果
    解决Tensorflow 使用时cpu编译不支持警告:that this TensorFlow binary was not compiled to use: AVX AVX2
  • 原文地址:https://www.cnblogs.com/trekxu/p/10472385.html
Copyright © 2011-2022 走看看