NoNodeAvailableException:没有节点可用于执行查询
NoNodeAvailableException: No node was available to execute the query
我没有使用 Elasticssearch。我正在尝试使用 CQL 在 cassandra 中执行一些数据库操作。我正在使用线程。虽然 运行 一段时间后我总是在线程中收到异常的代码:com.datastax.oss.driver.api.core.NoNodeAvailableException:没有节点可用于执行查询。
我什至用一个线程测试过。错误仍然存在。这是我的代码:
InetAddress addrOne = InetAddress.getByName("52.15.195.41");
InetSocketAddress addrSocOne = new InetSocketAddress(addrOne,9042);
CqlSession sessionOne = CqlSession.builder().addContactPoint(addrSocOne).withLocalDatacenter("us-east-2").withKeyspace("test").build();
while(counter <= 100)
{
String query = "select max(id) FROM samplequeue";
ResultSet rs = session.execute(query);
for (Row row : rs)
{
int exS = row.getInt("system.max(id)");
}
counter++;
Thread.sleep(50);
}
这是一个非常简单的修改示例,只是为了演示问题。我无法解决它。所有线程都退出并给出相同的异常。我是 AWS 上的 运行 cassandra 3.11.4。我的所有节点都已启动 运行,我可以在后端很好地执行操作。
将 .withLocalDatacenter("us-east-2")
更改为 .withLocalDatacenter("datacenter1")
并重试。
你可以在cassandra中执行nodetool status,你会得到Datacenter的名称。这是您必须在 withLocalDatacenter
方法中输入的值:
/opt/apache-cassandra-3.11.2/bin$ ./nodetool status
Datacenter: **dc1**
===============
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address Load Tokens Owns (effective) Host ID Rack
当运行在本地连接时,最好运行 nodetool status 命令获取dc 名称并在连接到Cassandra 实例时在应用程序中使用。
我没有使用 Elasticssearch。我正在尝试使用 CQL 在 cassandra 中执行一些数据库操作。我正在使用线程。虽然 运行 一段时间后我总是在线程中收到异常的代码:com.datastax.oss.driver.api.core.NoNodeAvailableException:没有节点可用于执行查询。
我什至用一个线程测试过。错误仍然存在。这是我的代码:
InetAddress addrOne = InetAddress.getByName("52.15.195.41");
InetSocketAddress addrSocOne = new InetSocketAddress(addrOne,9042);
CqlSession sessionOne = CqlSession.builder().addContactPoint(addrSocOne).withLocalDatacenter("us-east-2").withKeyspace("test").build();
while(counter <= 100)
{
String query = "select max(id) FROM samplequeue";
ResultSet rs = session.execute(query);
for (Row row : rs)
{
int exS = row.getInt("system.max(id)");
}
counter++;
Thread.sleep(50);
}
这是一个非常简单的修改示例,只是为了演示问题。我无法解决它。所有线程都退出并给出相同的异常。我是 AWS 上的 运行 cassandra 3.11.4。我的所有节点都已启动 运行,我可以在后端很好地执行操作。
将 .withLocalDatacenter("us-east-2")
更改为 .withLocalDatacenter("datacenter1")
并重试。
你可以在cassandra中执行nodetool status,你会得到Datacenter的名称。这是您必须在 withLocalDatacenter
方法中输入的值:
/opt/apache-cassandra-3.11.2/bin$ ./nodetool status
Datacenter: **dc1**
===============
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address Load Tokens Owns (effective) Host ID Rack
当运行在本地连接时,最好运行 nodetool status 命令获取dc 名称并在连接到Cassandra 实例时在应用程序中使用。