微服務中,直接在各模塊之間暴露的接口上標註@FeignClient是不合規範的。
像這樣。應該是不被允許的。
正確使用姿勢是,各模塊暴露的接口應該是純粹的
public interface RpcService { @GetMapping("hello") String hello(); }
而我們在使用的時候要搞一個接口去繼承這個接口,在子接口上標註@FeignClient。像這樣
@FeignClient("cctv1") public interface RpcFeignService extends RpcService { }
且在調用的時候注入這個子接口
這樣在做熔斷和降級的時候會規避掉一些問題。而且,重要的是,當我們引用了別的微服務的api模塊時,因爲我們並不需要所有的接口,如果他的接口都加了@FeignClient的話,我們的項目就會創建很多無用的代理對象。