FeignClient自调用问题处理

项目中使用feignClient时,有时会遇到自调用情况,即A服务通过feignClient,调用了自己服务的接口。这种情况一般是由于错误的方法使用,不正确的feignClient依赖导致,应予以修正。

但也有一些情况,比如依赖的外部sdk包中的service方法里,通过feignClient调用了远程方法,而这个远程方法的服务方正是自己(比如serviceA)。在这种情况下,可以通过以下步骤进行处理,将远程调用变为本地方法直接执行:

  1. 在定义远程调用的FeignClient类上,声明primary值为true:
@FeignClient(value = "serviceA", contextId = "testFeign", path = "busitest", primary = false)
public interface TestFeign {
  @GetMapping
  public String get();
}
  1. 将对应实现该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去处理请求。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容