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

    Feign使用Hystrix开发步骤

    1、导入依赖spring-cloud-starter-hystrix

    2、消费启动类开启@EnableCircuitBreaker

    3、配置yml文件feign.hystrix.enabled=true

    4、实现FeignClient接口或FallbackFactory接口
    4.1、实现FeignClient接口
    4.2、实现FallbackFactory接口

    5、@FeignClient注解配置fallback参数

     

    1、导入依赖spring-cloud-starter-hystrix

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

     

    2、消费启动类开启@EnableCircuitBreaker

    @SpringBootApplication
    @EnableDiscoveryClient
    @EnableFeignClients
    @EnableHystrix //开启Hystrix支持
    public class RibbonConsumerApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(RibbonConsumerApplication.class, args);
        }
        
    }

     

    3、配置yml文件feign.hystrix.enabled=true

    server:
      port: 8808
    feign: 
      hystrix:
        #开启feign的hystrix支持,默认是false 
        enabled: true

     

    4、实现FeignClient接口或FallbackFactory接口
    4.1、实现FeignClient接口
    TestClient1.java

    //fallback 指定一个回退类,这个类必须实现@FeignClient声明的接口,并且在spring context中
    @FeignClient(value="cloud-producer",
        configuration=FeignClientsConfiguration.class,
        fallback=TestClient1FallBack.class)
    public interface TestClient1 {
        
            @GetMapping(value = "/get/{id}")
            public String get(@PathVariable("id") String id);
    
            @RequestMapping(value = "/getuser/{id}")
            public User getUser(@PathVariable("id") String id);
            
            @RequestMapping(value = "/getuser2", method = RequestMethod.GET)
            public User getUser2(User user);
    
            @RequestMapping(value = "/postuser")
            public User postUser(@RequestBody User user);
    
            @RequestMapping(value = "/postuser")
            public User postUser2(User user);
    
            @RequestMapping(value = "/postuser", method = RequestMethod.GET)
            public User postUser3(User user);
    
            @GetMapping(value = "/listAll")
            List<User> listAll();
        
    }


    TestClient1FallBack.java

    @Component
    public class TestClient1FallBack implements TestClient1 {
        @Override
        public String get(String id) {
            return "feign hystrix fallback for get method";
        }
    
        @Override
        public User getUser(String id) {
            User errorUser = new User();
            errorUser.setId("getUser.errorId");
            errorUser.setName("getUser.errorName");
            return errorUser;
        }
    
        @Override
        public User getUser2(User user) {
            User errorUser = new User();
            errorUser.setId("getUser2.errorId");
            errorUser.setName("getUser2.errorName");
            return errorUser;
        }
    
        @Override
        public User postUser(User user) {
            User errorUser = new User();
            errorUser.setId("postUser.errorId");
            errorUser.setName("postUser.errorName");
            return errorUser;
        }
    
        @Override
        public User postUser2(User user) {
            User errorUser = new User();
            errorUser.setId("postUser2.errorId");
            errorUser.setName("postUser2.errorName");
            return errorUser;
        }
    
        @Override
        public User postUser3(User user) {
            User errorUser = new User();
            errorUser.setId("postUser3.errorId");
            errorUser.setName("postUser3.errorName");
            return errorUser;
        }
    
        @Override
        public List<User> listAll() {
            User errorUser = new User();
            errorUser.setId("listAll.errorId");
            errorUser.setName("listAll.errorName");
            ArrayList<User> list = new ArrayList<User>();
            list.add(errorUser);
            return list;
        }
    }


    Test1Controller.java

    @RestController
    public class Test1Controller {
        
        @Autowired
        private TestClient1 testClient1;
        
        @GetMapping("/feign1/get/{id}")
        public String get(@PathVariable String id) {
            String result = testClient1.get(id);
            return result;
        }
        
        @GetMapping("/feign1/getuser/{id}")
        public User getUser(@PathVariable String id) {
            User result = testClient1.getUser(id);
            return result;
        }
        
        @GetMapping("/feign1/getuser2")
        public User getUser2(User user) {
            User result = testClient1.getUser2(new User());
            return result;
        }
        
        @GetMapping("/feign1/listAll")
        public List<User> listAll() {
            return testClient1.listAll();
        }
        
        @PostMapping("/feign1/postuser")
        public User postUser(@RequestBody User user) {
            User result = testClient1.postUser(user);
            return result;
        }
        
        @PostMapping("/feign1/postuser2")
        public User postUser2(@RequestBody User user) {
            User result = testClient1.postUser2(user);
            return result;
        }
        
        @PostMapping("/feign1/postuser3")
        public User postUser3(@RequestBody User user) {
            User result = testClient1.postUser3(user);
            return result;
        }
        
    }

     

    4.2、实现FallbackFactory接口
    TestClient3.java

    //fallbackFactory 指定一个fallback工厂,与指定fallback不同, 此工厂可以用来获取到触发断路器的异常信息,TestClientFallbackFactory需要实现FallbackFactory类
    @FeignClient(value="mima-cloud-producer",configuration=FeignClientsConfiguration.class,fallbackFactory=TestClien3tFallbackFactory.class)
    public interface TestClient3 {
        
        @RequestMapping(value="/get/{id}",method=RequestMethod.GET)
        public String get(@PathVariable("id") String id);
        
        @RequestMapping(value = "/getuser/{id}")
        public User getUser(@PathVariable("id") String id);
        
    }


    TestClien3tFallbackFactory.java——优点是可以获取到异常信息

    //FallbackFactory的优点是可以获取到异常信息
    @Component
    public class TestClien3tFallbackFactory implements FallbackFactory<TestClient3> {
    
        @Override
        public TestClient3 create(Throwable cause) {
            return new TestClient3() {
                @Override
                public String get(String id) {
                    return "get trigger hystrix open! reason:"+cause.getMessage();
                }
    
                @Override
                public User getUser(String id) {
                    User errorUser = new User();
                    errorUser.setId("getUser.errorId");
                    errorUser.setName("getUser.errorName");
                    return errorUser;
                }
            };
        }
        
    }


    Test3Controller.java

    @RestController
    public class Test3Controller {
        
        @Autowired
        private TestClient3 testClient3;
        
        @GetMapping("/feign3/get/{id}")
        public String get(@PathVariable String id) {
            String result = testClient3.get(id);
            return result;
        }
        
        @GetMapping("/feign3/getuser/{id}")
        public User getuser(@PathVariable String id) {
            User result = testClient3.getUser(id);
            return result;
        }
        
    }

     

    5、@FeignClient注解配置fallback参数

  • 相关阅读:
    数据收集
    数据展现
    一场媲美“超女”海选的招聘狂潮
    时机论:早起的鸟儿也要选对“用户”季节
    程序设计实践(评注版) 评注者序
    “三低”用户养活的互联网
    芯故事 心感动:英特尔企业文化的力量
    初始化游戏状态数据
    初始化游戏状态数据二
    几个常用的JavaScript字符串处理函数 – split()、join()、substring()和indexOf()
  • 原文地址:https://www.cnblogs.com/linjiqin/p/10195442.html
Copyright © 2011-2022 走看看