У меня простая установка с сервером Eureka и двумя микросервисами, которые служат клиентами Eureka. Один микросервис должен иметь возможность звонить другому. На веб-интерфейсе сервера Eureka я вижу, что служба зарегистрирована под именем «my-service», которое я установил в application.properties.
Я прочитал несколько вопросов по этому поводу в stackoveflow. Ответ почти всегда - добавить аннотацию @LoadBalanced к Autowired RestTemplate. К сожалению, я сделал это, но до сих пор получаю исключение UnknownHostException.
Микросервисы - RestTemplate UnknownHostException
Spring-Boot Autowired DiscoveryClient RestTemplate UnknownHostException
Мой бин в конфиге:
@LoadBalanced
@Bean
RestTemplate restTemplate() {
return new RestTemplate();
}
Мой микросервис вызывает мой сервис:
public class MyCallingService {
@Autowired
private RestTemplate restTemplate;
public JsonArray makeCall() {
ResponseEntity<JsonArray> response = this.restTemplate
.getForObject("http://my-service/api/call", JsonArray.class);
return response.getBody();
}
}
Когда я звоню из одного микросервиса в другой, я получаю исключение UnknownHostException для my-service.
РЕДАКТИРОВАТЬ: я пропустил некоторую информацию, из которой я подумал, что это не вызывает такого поведения, но оказалось, что это так: я вызываю makeCall () в другом методе beans, который аннотируется @PostConstruct. Если я вызываю makeCall () после внедрения зависимости, я не получаю исключение UnknownHostException и могу позвонить. Кто-то может возразить, почему так происходит?