项目中使用feignClient时,有时会遇到自调用情况,即A服务通过feignClient,调用了自己服务的接口。这种情况一般是由于错误的方法使用,不正确的feignClient依赖导致,应予以修正。
但也有一些情况,比如依赖的外部sdk包中的service方法里,通过feignClient调用了远程方法,而这个远程方法的服务方正是自己(比如serviceA)。在这种情况下,可以通过以下步骤进行处理,将远程调用变为本地方法直接执行:
在定义远程调用的FeignClient类上,声明primary值为true:
@FeignClient(value = "serviceA", contextId = "testFeign", path = "busitest", primary = false) public interface TestFeign { @GetMapping public String get(); }
将对应实现该FeignClient方法的Controller类上,补全继承关系,并声明@Primary:
@RequestMapping("busitest") @RestController @Primary public class BusiTestController implements TestFeign{ @GetMapping public String get(){ return "get"; } }
完成以上步骤后,重新部署api包。此时如果某服务的sdk包中存在如下Service:
@Service public class BusiService{ @Autowired private TestFeign testFeign; public Strinmg busiMethod(){ testFeign.get(); } }
则该Service在serviceA之外的服务中使用时,执行busiMethod方法,会通过feignClient向serviceA发起远程调用;而在serviceA服务本身使用这个Service时,执行busiMethod方法,会直接执行BusiTestController的get()方法,而不再通过feignClient去处理请求。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。