DataStax Java驱动程序2.0.0-beta2与Cassandra 1.2.1:不支持的协议版本。

3
我想知道是否可以将 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();

I get the following exception:

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一起使用?驱动程序/服务器兼容性矩阵在哪里可以找到?
我已经花了将近一天的时间来解决这个问题。
谢谢, Matthew
2个回答

12

是的,它是不兼容的。根据java-driver 2.0的要求

该驱动程序使用Cassandra的本地协议,而此版本2.0使用该协议的第二个版本。因此,该驱动程序版本需要大于或等于2.0的Cassandra版本(对于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>

啊,因为它在驱动程序核心文件夹里,所以没有注意到。如果它在根目录的自述文件中突出显示会很好。谢谢! - Matthew Adams

-1

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

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接