Учитывая следующий пример кода
-- код клиентской библиотеки
@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 не будет знать, что делать, потому что есть два bean-компонента, реализующих StringClient.
Одним из решений, чтобы избежать этого, было бы не реализовывать StringClient в StringController, но дублирование кода из интерфейса и остального контроллера было бы подвержено ошибкам. Может ли кто-нибудь указать более элегантное решение этой проблемы?
@FeignClient
только среди клиентов. - person spencergibb   schedule 08.07.2015@FeignClient
, но это не идеально (в случае, если несколько экземпляров@FeignClient
совместно используют один и тот же пакет в разных проектах, и некоторые из них необходимы в качестве зависимостей StringApplication). - person marius_neo   schedule 15.07.2015