У меня есть простая установка с сервером регистрации службы Eureka, службой для общедоступного API и службой, которая вызывается из общедоступного API с помощью RestTemplate. Эврика сообщает мне, что услуги успешно зарегистрированы, но когда я звоню в службу
@Service
public class MyServiceService {
@Autowired
private RestTemplate restTemplate;
private final String serviceUrl;
public MyServiceService() {
this.serviceUrl = "http://MY-SERVICE";
}
public Map<String, String> getTest() {
Map<String, String> vars = new HashMap<>();
vars.put("id", "1");
restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory());
return restTemplate.postForObject(serviceUrl+"/test", "", Map.class, vars);
}
}
Я получаю следующее исключение
Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed;
nested exception is org.springframework.web.client.ResourceAccessException: I/O error on POST request for "http://MY-SERVICE/test": MY-SERVICE;
nested exception is java.net.UnknownHostException: MY-SERVICE] with root cause java.net.UnknownHostException: MY-SERVICE
Я создал образец проекта, чтобы проиллюстрировать свою настройку, может быть, кто-нибудь взглянет на него и скажет мне, что не так с моей настройкой.
https://github.com/KenavR/spring-boot-microservices-example
Благодарность
RestTemplate
не является сбалансированным по нагрузке. Поскольку вы используете в своем проекте Spring Cloud Angel.SR6, он должен автоматически добавить балансировку нагрузки. Единственное предложение, которое я могу придумать, - это аннотировать вашRestTemplate
с помощью@LoadBalanced
и посмотреть, имеет ли это значение. - person Patrick Grimard   schedule 11.05.2016@LoadBalanced @Bean RestTemplate
, потому что Brixton больше не создает его по умолчанию. Тогда вы можете@Autowire
это как обычно. Если этого не сделать, вы можете попробовать позвонить в свою службу, указав идентификатор службы в нижнем регистреhttp://my-service/test
. - person Patrick Grimard   schedule 11.05.2016