【问题标题】:NoHostAvailableException in CassandraCassandra 中的 NoHostAvailableException
【发布时间】:2017-11-20 19:27:17
【问题描述】:

我需要与 cassandra 进行演示+连接以进行课程。经过一番大闹之后,我留下了其他类型的错误,但我被困在这里,似乎没有得到 Keyspace 的地址。

import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.ResultSet;
import com.datastax.driver.core.Row;
import com.datastax.driver.core.Session;
import com.datastax.driver.core.exceptions.NoHostAvailableException;

public class conectaradb {

public static void main(String[] args) {
 try {
    Cluster cluster;
     Session sesion;

     cluster = Cluster.builder().addContactPoint("127.0.0.1").withPort(9042).build();

     sesion= cluster.connect("ejemplodb");

     ResultSet resultado= sesion.execute("select * from empleados");
     String nombreemp,fecha,cargo;
     double comision,salario;
     int empno;

     for (Row row:resultado) {
         empno=row.getInt("empno");
         cargo=row.getString("cargo");
         comision=row.getDouble("comision");
         fecha=row.getString("fechaing");
         nombreemp=row.getString("nombreempno");
         salario=row.getDouble("salario");
         System.out.println(empno+" "+cargo+" "+comision+" "+fecha+" "+nombreemp+" "+salario);
     }  
     cluster.close();

 }catch(NoHostAvailableException e) {
 System.out.println(e.getErrors());
}


}

}

如果有人能确定错误在哪里,我会很高兴,我想我的 yaml 文件是正确的。当代码到达 addcontactpoint 上的 localhost 时出现错误:“所有主机都尝试查询失败”。 在 .getError 之后,我得到一个“TransportException”。我不知道如何进一步。

【问题讨论】:

    标签: java cassandra


    【解决方案1】:

    将 cassandra.yaml 中的 rpc_broadcast_address 更新为有效 IP;因为 rpc_address 是 0.0.0.0。然后在重新启动 Cassandra 后尝试通过 Java 与该 IP 连接。

    https://docs.datastax.com/en/developer/java-driver/3.3/manual/address_resolution/

    【讨论】:

      【解决方案2】:

      我查看了 cmets 中的 yaml 文件。首先rpc_address是错误的,应该不是0.0.0.0。但你已经解决了。

      下一个错误是您设置了 native_transport_port: 9042 和 rpc_port: 9042。您不能对两个接口使用相同的端口。 Thrift (rpc) 是旧接口,不应该真正使用,所以如果我在哪里设置 start_rpc: false,但当然更改端口就足够了。在这里查看更多信息:https://academy.datastax.com/planet-cassandra/making-the-change-from-thrift-to-cql

      如果您遇到任何错误,请告诉我,我会更新答案。

      【讨论】:

        【解决方案3】:

        您的应用程序使用的是什么版本的 JDBC 驱动程序? 如果您使用的是不兼容的驱动程序,也会出现该错误。

        检查您是否有与 Cassandra 3.11 兼容的驱动程序 (版本 3.x 及更高版本)

        https://docs.datastax.com/en/developer/driver-matrix/doc/javaDrivers.html

        【讨论】:

        • 我正在尝试使用构建路径中的驱动程序 -> 添加外部库。你发给我的链接让我看到一段 maven 代码,实际上我什至不知道什么是 maven。难道没有我可以添加到库中的驱动程序吗?
        • 您使用的是什么版本的驱动程序?在该链接中,还有一个 tarball 选项,您可以下载它。
        • imgur.com/a/qdNP4 你有我导入的驱动程序。请让我知道他们是否正确。
        • 看起来不错,您有 v3.3 驱动程序。是您开始使用的版本吗?
        • 我在这里和那里更换了驱动程序,我想我是从那个开始的,然后才在这里寻求帮助。
        猜你喜欢
        • 1970-01-01
        • 2018-01-18
        • 2021-02-07
        • 2015-04-16
        • 2015-05-18
        • 2015-10-22
        • 2015-08-23
        • 2017-04-16
        • 2013-09-14
        相关资源
        最近更新 更多