zoukankan      html  css  js  c++  java
  • Feign整合Hystrix

    在前面Feign整合Ribbon负载均衡的基础上(Feign整合Ribbon负载均衡),Feigin再整合Hystrix断路

    一、backend_show_consumer工程

    该工程的依赖如下

    1、工程中的application.yml中增加配置

    feign:
      hystrix:
        enabled: true
    

      

    2、增加接口ProviderApi,对应backend_show_provider中的提供的两个接口

    @FeignClient(name = "hello-service-provider",
            path = "/provider",
            fallback = ProviderFallbackAPIImpl.class
    public interface ProviderApi {
    
        @RequestMapping(value = "/sayhello")
        String invokerProviderController(@RequestParam("message")String message);
    
        @RequestMapping(value = "/{providerId}/sayhello", method = RequestMethod.POST)
        String invokerProvider(
                @RequestHeader("author") String author,
                @PathVariable("providerId") String providerId,
                @RequestBody UserModel json);
    }
    

      设置fallback = ProviderFallbackAPIImpl.class

    3、降级实现:ProviderFallbackAPIImpl类

    //降级实现
    @Component
    public class ProviderFallbackAPIImpl implements  ProviderApi {
        @Override
        public String invokerProviderController(String message) {
            return "invokerProviderController fallback message=" +message;
        }
    
        @Override
        public String invokerProvider(String author, String providerId, UserModel json) {
            return "invokerProvider fallback auth=" +author + ",providerId=" + providerId +",json=" +json;
        }
    

      

    4、Controller方法

    @Slf4j
    @RestController
    public class ConsumerController {
    
        @Resource
        private ConsumerServiceAPI serviceAPI;
    
        @Resource
        private ProviderApi providerApi;
    
        @RequestMapping(value = "/sayhello/feign")
        public String sayHelloFeign(String message){
            System.out.println("feign message=" + message);
            return  providerApi.invokerProviderController(message);
        }
    
        @RequestMapping(value = "/sayhello/post")
        public String sayHelloPost( String author,
                                     String providerId,
                                    UserModel json){
            log.info("author:{},providerId;{}, userModel:{}", author, providerId, json);
    
            return  providerApi.invokerProvider(author, providerId, json);
        }
    
    
        @RequestMapping(value = "/sayhello")
        public String sayHello(String message){
            return  serviceAPI.sayHello(message);
        }
    
    }
    

      

    二、启动eureka服务(略)

    三、启动backend_show_provider

    四、测试

    1、此时访问正常

     或者

     此时说明Feign整合Ribbon负载均衡器

    2、停止backend_show_provider服务,这样backend_show_customer访问backend_show_provider就会超时,触发熔断

    此时说明Feign整合Hystrix断路器

    五、另外一种实现方式fallbackFactory

    1、增加fallbackFactory配置

    2、FallbackFactory 实现如下

    @Component
    public class FallbackFactory implements feign.hystrix.FallbackFactory {
        @Override
        public ProviderApi create(Throwable throwable) {
            return new ProviderApi() {
                @Override
                public String invokerProviderController(String message) {
                      return "invokerProviderController FallbackFactory message=" +message;
                }
    
                @Override
                public String invokerProvider(String author, String providerId, UserModel json) {
                    return "invokerProvider FallbackFactory auth=" +author + ",providerId=" + providerId +",json=" +json;
    
                }
            };
        }
    }
    

      

    3、调用

  • 相关阅读:
    nginx安装
    Mybatis使用generator自动生成映射配置文件信息
    Mysql报错Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't exist
    JS获取浏览器窗口大小 获取屏幕,浏览器,网页高度宽度
    js获取select标签选中的值
    linux下使用ffmpeg将amr转成mp3
    String与InputStream互转的几种方法
    javascript,检测对象中是否存在某个属性
    SQL语句在查询分析器中可以执行,代码中不能执行
    shell实现SSH自动登陆
  • 原文地址:https://www.cnblogs.com/linlf03/p/10398592.html
Copyright © 2011-2022 走看看