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、调用

  • 相关阅读:
    asp.net中获取网站根目录和物理路径的方法
    解决Windows 程序界面闪烁问题的一些经验
    winform中怎样使DataGridView的某一列可以添加两个Button控件
    Asp.net中实现多语言的Page的扩展的基类
    c#自杀程序的关键方法
    30岁前成功的12条黄金法则
    分享一个收集到的文件和目录操作类FileSystemObject
    有时候我们需要搜索指定栏目下的文章,如何实现呢?
    安静删除服务器超级多的文件,有的文件夹文件过多而不方便删除
    SQLServer2005数据库备份与还原
  • 原文地址:https://www.cnblogs.com/linlf03/p/10398592.html
Copyright © 2011-2022 走看看