• 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前台代码绑定后台变量方法总结
    <%# Eval("name")%>与<%# Bind("name")%>
    验证数字的正则表达式集
    品高:C#与JAVASCRIPT函数的相互调用:1.如何在JavaScript访问C#函数? 2.如何在JavaScript访问C#变量? 3.如何在C#中访问JavaScript的已有变量? 4.如何在C#中访问JavaScript函数?
    Visual Web Developer 的自定义WebForm模板
    关键字加亮JS方法
    vss安装,设置以及与vs2005联合项目操作(转)
    删除SQL中重复行
    完全兼容的 鼠标滚轴缩放图片
    为循环的repeater的第一行加个样式
  • 原文地址:https://www.cnblogs.com/linlf03/p/10398592.html
Copyright © 2020-2023  润新知