Apache HttpClient间歇性地工作

时间:2018-01-11 12:11:30

标签: java rest tomcat apache-httpclient-4.x

我对网络开发不是很有经验,所以这可能是初学者的问题。我有一个小项目,在Tomcats上的两台独立机器上有两个Java Web应用程序,一个面向用户(前端,FE应用程序)并与另一个(后端,BE应用程序)通信。 BE通过TCP与FE通过REST API与数据库进行通信。问题是FE应用程序中使用的Apache HttpGet有时会到达BE应用程序,但通常在FE上我得到UnknownHostException。与浏览器进行通信或直接从浏览器直接定位BE REST API始终有效。

我应该查看哪些日志,以及如何设置Tomcats?默认的Tomcat日志记录并没有给我很多信息,但我认为这是一个Tomcat配置问题,因为防火墙已经关闭,所有其他TCP通信都没有问题。下面是我对Apache HttpGet(非常香草)的使用:

...
    String url = String.format("http://%s/AutoexcludedDBService/nacionalidades", properties.getProperty("dbWebService"));
    CloseableHttpClient client = HttpClients.createDefault();
    CloseableHttpResponse response = null;
    String json = null;
    StatusLine statusLine = null;

    try {
        HttpGet request = new HttpGet(url);
        //request.setHeader(HttpHeaders.CONTENT_TYPE, "application/json");
        request.addHeader("accept", "application/json");
        request.addHeader("User-Agent", HTTP.USER_AGENT);
        RequestConfig requestConfig = RequestConfig.custom()
                .setConnectionRequestTimeout(10000).setConnectTimeout(10000).setSocketTimeout(10000).build();
        request.setConfig(requestConfig);
        response = client.execute(request);

...

2 个答案:

答案 0 :(得分:0)

根据您的问题,您的错误消息是“java.net.UnknownHostException”。

来自文档:https://docs.oracle.com/javase/7/docs/api/java/net/UnknownHostException.html

Thrown to indicate that the IP address of a host could not be determined.

此错误消息表明问题与主机%s的名称解析有关。

所以看起来您的问题应该是“为什么主机%a无法解析主机%s的名称”(以xy%的时间百分比表示)。

有了操作系统的所有其他相关详细信息,该问题不适用于stackoverflow,而是适用于serverfault.com。

但在发布之前,您应该检查您的操作系统的Google搜索结果:“os_name_here主机无法解析名称”

如果你不相信问题是由操作系统造成的,而是由于HttpClient,你可以将Apache HttpComponents的源代码添加到你的项目和抛出UnknownHostException的行,打印完整的堆栈跟踪,然后添加更多的日志记录那条线。

还有另一个线程可以弄清楚如何获取有关UnknownHostException的更多详细信息:

How to know the cause of UnknownHostException?

答案 1 :(得分:0)

原来问题是关于记事本保存带有BOM的UTF-8属性文件。然后发生了什么,找不到识别主机的属性,因此解析主机" null"导致例外。