【问题标题】:Unable to find host using java InetAddress but able to find using curl无法使用 java InetAddress 找到主机,但能够使用 curl 找到
【发布时间】:2017-03-11 05:46:40
【问题描述】:

我有一个在专用网络中运行的 elasticsearch 实例。当我尝试使用 InetAddress 访问它时,它给出了一个错误:java.net.UnknownHostException:

TransportClient client = new PreBuiltTransportClient(settings)
                .addTransportAddress(new InetSocketTransportAddress(InetAddress
                        .getByName("http://elasticsearch.myorg.net"), 9200));

但是,当我尝试使用 curl 命令访问它时,我能够得到响应。

curl http://elasticsearch.myorg.net:9200

可能导致此问题的原因是什么?


我的解决方法是使用 resttemplate https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/client/RestTemplate.html

这是一个非常简洁和简单的解决方案。

【问题讨论】:

  • 您是否尝试过删除名称的 http:// 部分?也许代理设置正在你的路上?
  • 我不应该需要代理,因为我在同一个私有网络上。而且我没有为 curl 使用任何代理...
  • 试过删除http,也不管用
  • getByName 需要主机名,在本例中为 elasticsearch.myorg.net。如果你可以ping elasticsearch.myorg.netnslookup elasticsearch.myorg.net 它应该可以工作。
  • 就是这个问题,我ping不通,只有curl有效

标签: java curl elasticsearch network-programming


【解决方案1】:

使用端口 9300 而不是 9200。9200 用于 REST api,9300 用于集群间通信和传输客户端。

https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/transport-client.html

【讨论】:

  • 不确定您在哪里看到此信息。我用9300试过了,响应是:这不是HTTP端口。
  • elastic.co/guide/en/elasticsearch/guide/current/… 的文档提到端口 9300 作为传输客户端使用的端口
  • 对于 curl 和浏览器请求,使用 9200。对于 Transport Client,在您提供的构造函数 sn-p 中使用 9300。
  • 实际上,elasticsearch 被配置为只接受 9200 的 HTTP 请求......所以在这种情况下,transportclient 对我不起作用。我使用了 RestTemplate 并且效果很好。仍然给予信任,因为您提供了正确的答案:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-03
  • 1970-01-01
  • 1970-01-01
  • 2011-11-18
  • 1970-01-01
  • 1970-01-01
  • 2016-10-22
相关资源
最近更新 更多