我具有以下基础结构:
1)在春季启动下运行的Eureka Server
2)2个在Spring Boot下运行的微服务,使用Eureka Client在服务器中注册自己。
3)一个需要与此2个微服务通信的旧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;
}
如您所见,此方法可在我的Feign Builder中使用恢复IP和PORT,请看:
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。没有弹簧怎么办?