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 {


}

解决方法就是把所有用到的接口完整的(全路径,方法名及参数都必须跟服务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);
}

方法2

@FeignClient("service-A")
public interface RefactorServiceA extends InterfaceService1 {


}

@FeignClient("service-A",contextId="interfaceService2")
public interface RefactorServiceA2 extends InterfaceService2 {

}

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

spring:
  main:
    allow-bean-definition-overriding: true

方法3,同方法2不加contextId

@FeignClient("service-A")
public interface RefactorServiceA extends InterfaceService1 {


}

@FeignClient("service-A")
public interface RefactorServiceA2 extends InterfaceService2 {

}

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

spring:
  main:
    allow-bean-definition-overriding: true

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序媛一枚~

您的鼓励是我创作的最大动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值