Java feign方式对同一个服务编写多个远程调用实例报错及3种解决办法
Posted 程序媛一枚~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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/queryTile") // 全路径
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
参考
- https://blog.csdn.net/weixin_62321552/article/details/125530866
- https://www.cnblogs.com/charon-m/p/16055157.html
以上是关于Java feign方式对同一个服务编写多个远程调用实例报错及3种解决办法的主要内容,如果未能解决你的问题,请参考以下文章