在没有Spring的情况下使用Netflix Feign发现Eureka Service

时间:2018-09-03 11:49:15

标签: netflix-eureka netflix-feign netflix-ribbon

我具有以下基础结构:

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。没有弹簧怎么办?

0 个答案:

没有答案