当通过datastax使用cannsandra的java驱动程序连接到cassandra客户端时,它抛出以下错误。。
线程“main”com.datastax.driver.core.exceptions.nohostavailableexception中出现异常:所有尝试查询的主机都失败(尝试时间:[/127.0.0.1])
请建议。。。
谢谢!
我的java代码如下:
package com.example.cassandra;
import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.Host;
import com.datastax.driver.core.Metadata;
public class SimpleClient {
private Cluster cluster;
public void connect(String node){
cluster = Cluster.builder().addContactPoint(node).build();
Metadata metadata = cluster.getMetadata();
System.out.println(metadata.getClusterName());
}
public void close()
{
cluster.shutdown();
}
public static void main(String args[]) {
SimpleClient client = new SimpleClient();
client.connect("127.0.0.1");
client.close();
}
11条答案
按热度按时间2q5ifsrm1#
我在测试带有一个节点的新集群时遇到了同样的问题。
从cluster builder中删除此项后,我可以连接:
它能够连接。
wpcxdonn2#
我遇到了这个问题,它是通过在socketoptions中设置readtimeout来排序的:
i1icjdpr3#
检查以下几点:
i) 检查服务器ip
ii)检查监听端口
iii)数据堆栈客户端依赖项必须与服务器版本匹配。
关于yaml文件,最新版本启用了以下属性:
dddzy1tm4#
在我的情况下,这是一个端口问题,我忘了更新
旧rpc端口无效
9160
新的二进制端口是9042
xeufq47z5#
当我收到错误信息时,我只是为那些可能和我有同样问题的人发布这个。原来我的复杂依赖树带来了com.google.collections的旧版本,它破坏了cql驱动程序。消除这种依赖,完全依靠Guava解决了我的问题。
pu82cl6c6#
我也遇到了这个问题,它是由提交的声明中的一个简单错误引起的。
显然,错误消息是误导性的。
o2rvlv0m7#
转到apache cassandra conf目录并启用二进制协议
cassandra二进制协议java驱动程序使用cassandra1.2中引入的二进制协议。它只适用于大于或等于1.2的cassandra版本。此外,二进制协议服务器不是用cassandra1.2中的默认配置文件启动的。必须为每个节点编辑cassandra.yaml文件:
然后重新启动节点。
f0brbegy8#
我也有同样的问题。我在一台单独的linux pc上安装了cassandra,并尝试通过Windows pc进行连接。我不允许创建连接。
但是当我们编辑cassandra.yaml,将我的linux pc ip地址设置为rpc\u地址并重新启动时,它允许我成功连接,
xqnpmsa89#
编辑
和改变
rpc_address
至0.0.0.0
,广播\u rpc\u地址和侦听\u地址到群集的ip地址。xam8gpfp10#
在我的例子中,我遇到了这个问题,因为我在连接过程中使用了默认的rpc端口9160。您可以在cassandra.yaml中找到不同的cql端口-
一旦我将代码更改为使用端口9042,连接尝试就成功了-
czfnxgou11#
假设有默认配置,请检查驱动程序版本兼容性。并不是所有的驱动程序版本都与cassandra的所有版本兼容,尽管它们声称向后兼容。请看下面的链接。
http://docs.datastax.com/en/developer/java-driver/3.1/manual/native_protocol/
我遇到了一个类似的问题&更改驱动程序版本解决了我的问题。
注意:希望您使用maven(或类似的东西)来解析依赖关系。否则,您可能需要为更高版本的驱动程序下载大量依赖项。