【问题标题】:DataStax Java driver 2.0.0-beta2 with Cassandra 1.2.1: unsupported protocol versionDataStax Java 驱动程序 2.0.0-beta2 和 Cassandra 1.2.1:不支持的协议版本
【发布时间】:2014-08-28 23:08:27
【问题描述】:

我想知道 com.datastax.cassandra:cassandra-driver-core:2.0.0-beta2 是否可以与 org.apache.cassandra:cassandra-all:1.2.1 一起使用。我正在使用 cassandra-maven-plugin:1.2.1-1(它使用 org.apache.cassandra:cassandra-all:1.2.1),添加

start_native_transport: true
native_transport_port: ${cassandra.nativePort}

yaml 插件属性。我可以成功telnet到端口。

但是,当我尝试通过以下代码进行连接时,

// Ports.NATIVE has the same value as "${cassandra.nativePort}" above
Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1")
    .withPort(Ports.NATIVE).build();
Session session = cluster.connect();

我得到以下异常:

com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: /127.0.0.1 (com.datastax.driver.core.ConnectionException: [/127.0.0.1] Unexpected error during transport initialization (com.datastax.driver.core.TransportException: [/127.0.0.1] Unexpected exception triggered (com.datastax.driver.core.exceptions.DriverInternalError: Server response from unsupported protocol version: 1))))
    at com.datastax.driver.core.ControlConnection.reconnectInternal(ControlConnection.java:179)
    at com.datastax.driver.core.ControlConnection.connect(ControlConnection.java:77)
    at com.datastax.driver.core.Cluster$Manager.init(Cluster.java:868)
    at com.datastax.driver.core.Cluster$Manager.newSession(Cluster.java:888)
    at com.datastax.driver.core.Cluster$Manager.access$200(Cluster.java:792)
    at com.datastax.driver.core.Cluster.connect(Cluster.java:155)

我认为关键是Server response from unsupported protocol version: 1

这是否意味着 2.0.0-beta2 驱动程序不能与 Cassandra 1.2.1 一起使用?驱动程序/服务器兼容性矩阵在哪里?

我已经为此烧了差不多一天了。

谢谢, 马修

【问题讨论】:

    标签: cassandra datastax-java-driver


    【解决方案1】:

    是的,它不兼容。 From the java-driver 2.0 requirements:

    驱动使用 Casandra 的原生协议,而这个 2.0 版本使用的是该协议的第二个版本。因此,此版本的驱动要求 Cassandra 版本大于或等于 2.0(对于 Cassandra 1.2,请使用 1.0 版本的驱动)。

    尝试降级到1.0,最新版本是1.0.4:

    <dependency>
      <groupId>com.datastax.cassandra</groupId>
      <artifactId>cassandra-driver-parent</artifactId>
      <version>1.0.4</version>
    </dependency>
    

    【讨论】:

    • 啊,没看到,因为它在驱动程序核心文件夹中。如果它在根的自述文件中突出显示会很好。谢谢!
    【解决方案2】:

    驱动程序版本 2.0 或更高版本的默认协议级别是 2。要使用旧版本的 Cassandra(例如 1.2),协议级别需要设置为 1。

    可以使用 Cluster.withProtocolVersion 方法在较新的驱动程序上设置协议版本,例如

    集群集群 = Cluster.builder().addContactPoint("127.0.0.1").withProtocolVersion(1) .withPort(Ports.NATIVE).build();

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-11
      • 2020-09-29
      • 1970-01-01
      • 1970-01-01
      • 2018-02-15
      • 2017-07-13
      • 2014-05-04
      • 1970-01-01
      相关资源
      最近更新 更多