SpringCloud服务之间的调用都是通过Feign 完成、怎么用,网上一大把教程。导入依赖,启动类添加注解。新增Client类并把@FeignClient注上去。那么问题来了,这个类应该放哪里。假如现在有B,A服务。B需要调用A。我的做法是将要生成的AClient类放置在A工程。

Spring Cloud Feign API接口位置的问题 

AccApi:

Spring Cloud Feign API接口位置的问题

AcctClient:

Spring Cloud Feign API接口位置的问题

例如这样。但启动项目会报错:Caused by: java.lang.IllegalStateException: Ambiguous mapping. Cannot map 'com.jjm.acct.AcctClient' method 

Spring Cloud Feign API接口位置的问题

原因很简单,注入了两个一样的Bean。因为AcctApi有两个实现、AcctClient和实际的业务控制层。

解决方法:

在AcctApi加@RequestMapping区分开业务控制层

Spring Cloud Feign API接口位置的问题

value里的值唯一就行。然后启动A服务。正常,启动B服务,调用也正常。但我预想的是B调用应该会路径错误,调用失败。因为同样的注解。子类的优先级会更高,然后再网上搜了半天没有什么结果。只好自己调试Feign源码看是怎么拼接路径。发现Feign是在BaseContract.parseAndValidateMetadata方法去解析注解。并且解析的父接口。一下明白了、弄了半天。值了

Spring Cloud Feign API接口位置的问题

此文仅在记录。可能有更好的解决方案。

 

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-06-18
  • 2021-12-15
  • 2022-12-23
  • 2021-07-25
  • 2021-06-27
  • 2021-12-04
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-08-03
  • 2022-12-23
  • 2021-07-12
  • 2021-11-24
  • 2022-03-03
相关资源
相似解决方案