在Elasticsearch文档中指定了有关http.port配置的以下内容:
http.port
要绑定到传入HTTP请求的端口。接受单个值或范围。如果指定了范围,则该节点将绑定到该范围中的第一个可用端口。
默认为9200-9300。
假设由于9200已经在使用中,Elasticsearch自动选择端口9202。 Java客户端应用程序如何知道选择了哪个端口并必须使用它创建RestHighLevelClient对象?有没有办法查询可以提供端口号信息的另一项服务?
谢谢。
更新
第一个答案之后,我尝试通过执行以下操作在Windows机器(生产环境)中重现步骤:
> tasklist | findstr "elasticsearch"
elasticsearch-service-x64 2232 Services 0 537,764 K
> netstat -aon | find /i "2232"
TCP 0.0.0.0:9200 0.0.0.0:0 LISTENING 2232
TCP 0.0.0.0:9300 0.0.0.0:0 LISTENING 2232
TCP 127.0.0.1:9200 0.0.0.0:0 LISTENING 2232
TCP 127.0.0.1:9300 0.0.0.0:0 LISTENING 2232
TCP 127.0.0.1:49201 127.0.0.1:49202 ESTABLISHED 2232
TCP 127.0.0.1:49202 127.0.0.1:49201 ESTABLISHED 2232
TCP 127.0.0.1:49203 127.0.0.1:49204 ESTABLISHED 2232
TCP 127.0.0.1:49204 127.0.0.1:49203 ESTABLISHED 2232
TCP 127.0.0.1:49205 127.0.0.1:49206 ESTABLISHED 2232
TCP 127.0.0.1:49206 127.0.0.1:49205 ESTABLISHED 2232
...
TCP 127.0.0.1:49275 127.0.0.1:49276 ESTABLISHED 2232
TCP 127.0.0.1:49276 127.0.0.1:49275 ESTABLISHED 2232
TCP [::1]:9200 [::]:0 LISTENING 2232
TCP [::1]:9300 [::]:0 LISTENING 2232
结果显示使用9200端口(http.port)的几行:
TCP 0.0.0.0:9200 0.0.0.0:0 LISTENING 2232
TCP 127.0.0.1:9200 0.0.0.0:0 LISTENING 2232
TCP [::1]:9200 [::]:0 LISTENING 2232
如果必须解析该结果以获得端口号,我应该寻找哪些IP地址?还是根本没关系?
答案 0 :(得分:1)
RestHighLevelClient
是线程安全的,并且在启动时或执行第一个请求时由应用程序实例化。如何“在幕后”完成操作,也许您可以签入RestClientBuilder.java
here。
不确定该问题,但是如果不确定使用哪个端口ES
,可以进行检查
[root@myserver ~]# service elasticsearch status
elasticsearch (pid 5384) is running...
## netstat on pid
[root@myserver~]# netstat -plunt | grep 5384
tcp 0 0 ::ffff:10.100.14.146:9300 :::* LISTEN 5384/java
tcp 0 0 ::ffff:10.100.14.19:9200 :::* LISTEN 5384/java
tcp 0 0 ::ffff:127.0.0.1:9200 :::* LISTEN 5384/java