微服务中,直接在各模块之间暴露的接口上标注@FeignClient是不合规范的。
像这样。应该是不被允许的。
正确使用姿势是,各模块暴露的接口应该是纯粹的
public interface RpcService { @GetMapping("hello") String hello(); }
而我们在使用的时候要搞一个接口去继承这个接口,在子接口上标注@FeignClient。像这样
@FeignClient("cctv1") public interface RpcFeignService extends RpcService { }
且在调用的时候注入这个子接口
这样在做熔断和降级的时候会规避掉一些问题。而且,重要的是,当我们引用了别的微服务的api模块时,因为我们并不需要所有的接口,如果他的接口都加了@FeignClient的话,我们的项目就会创建很多无用的代理对象。