次のコードサンプルを考える
-- クライアント ライブラリ コード
@FeignClient("string-service")
public interface StringClient {
@RequestMapping(method = RequestMethod.GET, value = "/microservicestring")
public String home();
}
@Service
public class StringHystrixClient {
private final SpringClient springClient;
//....
}
-- サービス ライブラリ コード
@RestController
public class StringController implements StringClient {
public String home(){
return "World";
}
}
@SpringBootApplication
@EnableHystrix
@EnableEurekaClient
@EnableFeignClients
public class StringApplication { ....}
サービス ライブラリがクライアント ライブラリを参照する場合、アプリケーションが開始されると、コンポーネント スキャンによって、StringHystrixClient からの依存関係を埋めるときに、Spring コンテナーが何をすべきかわからない状態になります。これは、StringClient を実装する 2 つの Bean があるためです。
これを回避する 1 つの解決策は、StringController に StringClient を実装しないことですが、インターフェイスと残りのコントローラーからのコードの重複により、エラーが発生しやすくなります。誰かがこの問題に対するより洗練された解決策を指摘できますか?