• Java feign方式对同一个服务编写多个远程调用实例报错及3种解决办法


    这篇博客将介绍Java feign方式对同一个服务进行多个远程调用实例遇到的报错及3种解决办法
    当单独仅有一个调用实例时ok,俩个调用实例时一段时间报错,一段时间好。间歇性的,之后就彻底调不通了。
    服务ServiceA有interface1,interface2,interface3
    服务ServiceB对interface1,interface2的方法进行进行调用。

    会报错超时connection timeout,或者拒绝连接connection refused。

    解决办法有3种如下:

    方法1

    错误方法如下:

    // 会报错Only Single Inheritance
    @FeignClient("service-A")
    public interface RefactorServiceA extends InterfaceService1,InterfaceService2 {
    
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    解决方法就是把所有用到的接口完整的(全路径,方法名及参数都必须跟服务A中定义的一致) 写到服务B中;

    @FeignClient("service-A")
    public interface RefactorServiceA {
    
        @GetMapping({"/refactor/a/queryInterface1"}) // 全路径
        Response<String> getTileFromInterface1(@RequestParam("x") long var1, @RequestParam("y") long var3, @RequestParam("z") int var5);
    
        @GetMapping({"/refactor/a/c/queryInterface2"}) // 全路径
        Response<String> getUserFromInterface2(@RequestParam("userId") String userId);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    方法2

    @FeignClient("service-A")
    public interface RefactorServiceA extends InterfaceService1 {
    
    
    }
    
    @FeignClient("service-A",contextId="interfaceService2")
    public interface RefactorServiceA2 extends InterfaceService2 {
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    解决方法就是消费者服务B下的application.yml或者bootstrap.yml中添加配置:允许相同的bean定义合并;

    spring:
      main:
        allow-bean-definition-overriding: true
    
    • 1
    • 2
    • 3

    方法3,同方法2不加contextId

    @FeignClient("service-A")
    public interface RefactorServiceA extends InterfaceService1 {
    
    
    }
    
    @FeignClient("service-A")
    public interface RefactorServiceA2 extends InterfaceService2 {
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    不加contextId也可以;
    解决方法就是消费者服务B下的application.yml或者bootstrap.yml中添加配置:允许相同的bean定义合并;

    spring:
      main:
        allow-bean-definition-overriding: true
    
    • 1
    • 2
    • 3

    参考

  • 相关阅读:
    SpringSecurity启动流程源码深入刨析
    基于SSM农产品商城系统
    【Arduino26】88点阵显示液晶对比度实验
    百分比组件
    柏林自由大学研究团队《Ecology Letters 》揭示AMF在植物对全球变化响应的作用
    Nginx 报错问题汇总(持续更新ing)
    LLM大模型量化原理
    Linux CentOS 8.x 生成rsa公私密钥
    力扣崩溃题:链表相加
    好书分享丨区块链的骨骼——密码技术
  • 原文地址:https://blog.csdn.net/qq_40985985/article/details/126649235