gpt4 book ai didi

java - 无法在 TransportClient : NoNodeAvailableException[None of the configured nodes -are available: []] 中创建 InetSocketTransportAddress

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:40:50 28 4
gpt4 key购买 nike

更新:希望更清晰的细节和代码...

我正在尝试让我的第一个 Java 应用程序与在此节点上运行的 ElasticSearch 通信(删除了时间戳和日志级别):

$ bin/elasticsearch
[bootstrap ]Unable to lock JVM Memory: error=78,reason=Function not implemented
[bootstrap ]This can result in part of the JVM being swapped out.
[node ][clustername-node.01] version[2.0.0], pid[49252], build[de54438/2015-10-22T08:09:48Z]
[node ][clustername-node.01] initializing ...
[plugins ][clustername-node.01] loaded [license, marvel], sites []
[env ][clustername-node.01] using [1] data paths, mounts [[/ (/dev/disk1)]], net usable_space [164.4gb], net total_space [232.5gb], spins? [unknown], types [hfs]
[node ][clustername-node.01] initialized
[node ][clustername-node.01] starting ...
[transport ][clustername-node.01] publish_address {127.0.0.1:9300}, bound_addresses {127.0.0.1:9300}
[discovery ][clustername-node.01] clustername/AM4lm0ZBS_6FofhC0UbNIA
[cluster.service ][clustername-node.01] new_master {clustername-node.01}{AM4lm0ZBS_6FofhC0UbNIA}{127.0.0.1}{127.0.0.1:9300}, reason: zen-disco-join(elected_as_master, [0] joins received)
[http ][clustername-node.01] publish_address {127.0.0.1:9200}, bound_addresses {127.0.0.1:9200}
[node ][clustername-node.01] started
[license.plugin.core][clustername-node.01] license [3ff50767-f1a5-4bac-8e35-c7a131384fd9] - valid
[license.plugin.core][clustername-node.01]
[gateway ][clustername-node.01] recovered [14] indices into cluster_state

使用 DEBUG-ing,正如@Val 所建议的,这些额外的行也包含在上面的输出中:

[transport.netty][clustername.01] using profile[default], worker_count[8], port[9300-9400], bind_host[null], publish_host[null], compress[false], connect_timeout[30s], connections_per_node[2/3/6/1/1], receive_predictor[512kb->512kb]
[transport.netty][clustername.01] binding server bootstrap to: 127.0.0.1
[transport.netty][clustername.01] Bound profile [default] to address {127.0.0.1:9300}

地址部分:

publish_address {127.0.0.1:9300}, bound_addresses {127.0.0.1:9300}
clustername/AM4lm0ZBS_6FofhC0UbNIA
new_master {clustername-node.01}{AM4lm0ZBS_6FofhC0UbNIA}{127.0.0.1}{127.0.0.1:9300}, reason: zen-disco-join(elected_as_master, [0] joins received)
publish_address {127.0.0.1:9200}, bound_addresses {127.0.0.1:9200}

我已经 confirmed the IP and port正在运行:

$ bin/elasticsearch --version
Version: 2.0.0, Build: de54438/2015-10-22T08:09:48Z, JVM: 1.8.0_45
$ telnet 127.0.0.1 9300
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

^CConnection closed by foreign host.
$ telnet 127.0.0.1 9301
Trying 127.0.0.1...
telnet: connect to address 127.0.0.1: Connection refused
telnet: Unable to connect to remote host
$

正如预期的那样,9300 在那里,9301 不在那里。我是 reasonably sure端口 9300 对于 Java TransportClient 是正确的。

但无论我如何尝试创建 InetSocketTransportAddress...

import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.client.Client;
import org.elasticsearch.client.transport.NoNodeAvailableException;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;

import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.UnknownHostException;

public class TrivialClient {

public static void main(String[] args) throws UnknownHostException {
InetSocketTransportAddress transportAddress = new InetSocketTransportAddress(
InetAddress.getLocalHost(), 9300);
createClientPrintResponse("getLocalHost", transportAddress);

transportAddress = new InetSocketTransportAddress(
InetAddress.getByName("localhost"), 9300);

createClientPrintResponse("getByName(\"localhost\")", transportAddress);

//Does not compile in ElasticSearch 2.0
// transportAddress = new InetSocketTransportAddress("localhost", 9300);
// createClientPrintResponse("getByName(\"localhost\")", transportAddress);

transportAddress = new InetSocketTransportAddress(
InetAddress.getByAddress(new byte[]{127, 0, 0, 1}), 9300);
createClientPrintResponse("getByAddress(new byte[] {127, 0, 0, 1})", transportAddress);

transportAddress =
new InetSocketTransportAddress(new InetSocketAddress("127.0.0.1", 9300));
createClientPrintResponse("InetSocketAddress", transportAddress);
}

private static void createClientPrintResponse(String description,
InetSocketTransportAddress transportAddress) {
Settings settings = Settings.settingsBuilder()
.put("cluster.name", "clustername").build();
Client client;
client = TransportClient.builder().settings(settings).build().
addTransportAddress(transportAddress);
try {
GetResponse response = client.prepareGet("comicbook", "superhero", "1").get();
System.out.println(description + ": " + response);
} catch (NoNodeAvailableException e) {
System.out.println(description + ": " + e);
//e.printStackTrace();
}
}
}

...它失败了:

getLocalHost: NoNodeAvailableException[None of the configured nodes are available: []]
getByName("localhost"): NoNodeAvailableException[None of the configured nodes are available: []]
getByAddress(new byte[] {127, 0, 0, 1}): NoNodeAvailableException[None of the configured nodes are available: []]
InetSocketAddress: NoNodeAvailableException[None of the configured nodes are available: []]

堆栈跟踪:

NoNodeAvailableException[None of the configured nodes are available: []]
getLocalHost: NoNodeAvailableException[None of the configured nodes are available: []]
at org.elasticsearch.client.transport.TransportClientNodesService.ensureNodesAreAvailable(TransportClientNodesService.java:280)
at org.elasticsearch.client.transport.TransportClientNodesService.execute(TransportClientNodesService.java:197)
at org.elasticsearch.client.transport.support.TransportProxyClient.execute(TransportProxyClient.java:55)
at org.elasticsearch.client.transport.TransportClient.doExecute(TransportClient.java:272)
at org.elasticsearch.client.support.AbstractClient.execute(AbstractClient.java:347)
at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:85)
at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:59)
at org.elasticsearch.action.ActionRequestBuilder.get(ActionRequestBuilder.java:67)
at springes.esonly.TrivialClient.createClientPrintResponse(TrivialClient.java:47)
at springes.esonly.TrivialClient.main(TrivialClient.java:19)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)

我错过了什么?

最佳答案

您必须指定集群的名称:

Settings settings = Settings.settingsBuilder()
.put("cluster.name", "my_cluster_name").build();

Client client = TransportClient.builder().settings(settings).build()
.addTransportAddress(new InetSocketTransportAddress(new InetSocketAddress("127.0.0.1", 9300)));

引用: https://discuss.elastic.co/t/elasticsearch-in-java-transportclient-nonodeavailableexception-none-of-the-configured-nodesare-available/34452

关于java - 无法在 TransportClient : NoNodeAvailableException[None of the configured nodes -are available: []] 中创建 InetSocketTransportAddress,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33677358/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com