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");
                }
                
            };
        }
    
    }
  • 相关阅读:
    强化训练1
    强化训练2
    变量的本质
    抽象层
    安装vs2015
    解决思路
    分析栈的缺点
    (转)使用yuicompressor-maven-plugin压缩js及css文件(二)
    (转)yuicompressor 与 maven结合,打包,压缩js,css (一)
    (转)Properties Editor为你解除通过native2ascii进行Unicode转码的烦恼
  • 原文地址:https://www.cnblogs.com/trekxu/p/10472385.html
Copyright © 2011-2022 走看看