UnknownHostException для клиента Eureka с использованием RestTemplate

У меня простая установка с сервером 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 и могу позвонить. Кто-то может возразить, почему так происходит?


person Peter    schedule 28.08.2019    source источник


Ответы (1)


если вы используете Spring boot и spr, используйте это

  @Bean
  @LoadBalanced
  public RestTemplate restTemplate(RestTemplateBuilder builder) {
    return builder.build();
  }
person Jenifer Akila R    schedule 30.07.2020