Ich habe eine einfache Einrichtung mit einem Eureka Service Registrierungsserver, einem Service für die öffentliche API und einen Service, der von der öffentlichen API mit RestTemplate aufgerufen wird. Eureka sagt mir, dass die Dienste erfolgreich registriert sind, aber wenn ich den Service rufenMicroservices - RestTemplate UnknownHostException
@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);
}
}
ich die folgende Ausnahme mein Setup zu illustrieren
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
Ich habe ein Beispielprojekt bekommen, vielleicht könnte jemand eine nehmen schau es dir an und sag mir, was mit meiner Einrichtung nicht stimmt.
https://github.com/KenavR/spring-boot-microservices-example
dank
Es scheint, als ob die ' RestTemplate, der injiziert wird, ist nicht der Lastausgleich. Da Sie Spring Cloud Angel.SR6 in Ihrem Projekt verwenden, sollte die Last automatisch ausgeglichen werden. Der einzige Vorschlag, den ich mir vorstellen kann, ist, dass Sie Ihre 'RestTemplate' mit' @ LoadBalanced' annotieren und sehen, ob das einen Unterschied macht. –
Ich habe das in der Vergangenheit versucht und nun wieder, leider bleibt der Fehler gleich. – KenavR
Haben Sie Spring Cloud Brixton.RELEASE versucht, wurde es heute veröffentlicht. Beachten Sie, dass Sie bei Brixton eine eigene '@LoadBalanced @Bean RestTemplate' definieren müssen, da Brixton diese nicht mehr standardmäßig erzeugt. Dann kannst du es wie üblich "autowire". Abgesehen davon könnten Sie versuchen, Ihren Service mit der Service-ID in Kleinbuchstaben "http: // my-service/test" aufzurufen. –