我想知道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
插件属性。 我可以成功地远程登录到端口。
但是,当我尝试通过以下代码进行连接时,
// 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 一起使用? 驱动程序/服务器兼容性矩阵在哪里?
我已经为此燃烧了将近一天。
谢谢马修
是的,它不兼容。从 java 驱动程序 2.0 要求:
驱动程序使用 Casandra 的本机协议,此版本 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>
驱动程序版本 2.0 或更高版本的默认协议级别为 2。要使用旧版本的 Cassandra(例如 1.2),协议级别需要设置为 1。
可以使用 Cluster.withProtocolVersion 方法在较新的驱动程序上设置协议版本,例如
群集群集 = Cluster.builder().addContactPoint("127.0.0.1").withProtocolVersion(1) .withPort(Ports.NATIVE).build();