У меня есть следующая инфраструктура:
1) Eureka Server, работающий под Spring Boot
2) 2 Микросервисы, работающие под Spring Boot, используя Eureka Client для регистрации на сервере.
3) Старое JSF-приложение, которое должно взаимодействовать с этими двумя микросервисами.
Итак, я знаю, что у Eureka есть несколько конечных точек, чтобы получить HOST и PORT от зарегистрированной службы, думая об этом, я создал следующее:
private String getURLEurekaService(String app) throws IOException, ParserConfigurationException, SAXException {
String urlEureka = "http://myip:8761/eureka/apps/" + app;
CloseableHttpClient closeableHttpClient = HttpClientBuilder.create().build();
HttpGet get = new HttpGet(urlEureka);
HttpResponse response = closeableHttpClient.execute(get);
String xml = IOUtils.toString(response.getEntity().getContent());
Document doc = DocumentBuilderFactory.newInstance()
.newDocumentBuilder()
.parse(new InputSource(new StringReader(xml)));
String ip = doc.getElementsByTagName("ipAddr").item(0).getTextContent();
String port = doc.getElementsByTagName("port").item(0).getTextContent();
return "http://" + ip + ":" + port;
}
Как вы можете видеть этот метод восстановления IP и PORT для использования в моем Feign Builder, посмотрите:
NfeClientAPI nfeClientAPI = Feign.builder().client(new OkHttpClient())
.encoder(new GsonEncoder())
.decoder(new GsonDecoder())
.logger(new Slf4jLogger(NfeClientAPI.class))
.logLevel(Logger.Level.FULL)
.target(NfeClientAPI.class, getURLEurekaService("BRASILFISCAL-NFE"));
Итак, это работает хорошо, но я думаю, что очень многословно. С помощью Spring-Boot я могу использовать OpenFeign + Ribbon для автоматического обнаружения IP + PORT, без явного вызова Eureka Endpoint. Как я могу сделать это без весны?