У меня есть приложение Spring Boot, которое служит клиентом Eureka. Приложению необходимо вызвать другую микрослужбу через REST, и я хочу сделать этот вызов с помощью Feign. Проблема, с которой я столкнулся, заключается в том, что мое приложение пытается найти имя службы в Eureka, когда оно определено только в файле yaml моих приложений.
Прошу прощения за трудность объяснения. Надеюсь, следующие фрагменты кода помогут прояснить ситуацию.
Имитация клиента:
@FeignClient("foo")
@Component
public interface FooServiceProxy{
@RequestMapping(value = "/balance", method = RequestMethod.POST, produces = "application/json")
ServiceResponse execute(ServiceRequest serviceRequest);
}
В моем контроллере, который вызывает этого клиента Feign, FooServiceProxy определяется с помощью @AutoWired:
@Autowired
private FooServiceProxy fooServiceProxy;
Мой файл yaml выглядит следующим образом:
spring:
application:
name: app-name
server:
port: 8080
foo:
ribbon:
listOfServers: http://hostname:8081/balance
eureka:
client:
fetchRegistry: false
serviceUrl:
defaultZone: http://eurekasrver:8761/eureka/
Моя проблема в том, что во время выполнения возникает следующая ошибка: java.lang.RuntimeException: com.netflix.client.ClientException: балансировщик нагрузки не имеет доступного сервера для клиента: foo
Интересно, что если я удалю аннотацию @EnableEurekaClient из приложения, все заработает. Я считаю, что понимаю проблему, заключающуюся в том, что вместо того, чтобы искать сервер для foo в моем файле yaml, поскольку приложение является клиентом Eureka, Feign идет прямо в Eureka для поиска IP-адреса сервера, а затем терпит неудачу, поскольку его нельзя найти. Несмотря на кажущееся понимание проблемы, я не смог найти решение в Интернете или придумать его сам.
Любая помощь будет оценена по достоинству. Спасибо!