gpt4 book ai didi

java - 无法连接到 Cassandra - Cassandra Datastax 驱动程序 3.6 中的 Guava 兼容性问题

转载 作者:行者123 更新时间:2023-12-02 01:18:48 26 4
gpt4 key购买 nike

我正在使用 Cassandra 驱动程序 3.6.0 和 Guava 19.0;我得到以下异常:

[main] INFO com.datastax.driver.core - DataStax Java driver 3.6.0 for Apache Cassandra
[main] INFO com.datastax.driver.core.GuavaCompatibility - Detected Guava >= 19 in the classpath, using modern compatibility layer
[main] INFO com.datastax.driver.core.ClockFactory - Using native clock to generate timestamps.
Exception in thread "main" com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: localhost/127.0.0.1:9042
(com.datastax.driver.core.exceptions.TransportException: [localhost/127.0.0.1:9042] Cannot connect), localhost/0:0:0:0:0:0:0:1:9042
(com.datastax.driver.core.exceptions.TransportException: [localhost/0:0:0:0:0:0:0:1:9042] Cannot connect))
at com.datastax.driver.core.ControlConnection.reconnectInternal(ControlConnection.java:268)

我将 Cassandra Core 驱动程序从 20 降级到 19;当我从客户端代码连接到集群时,我仍然遇到上述问题。

pom.xml 片段

        <dependency>
<groupId>com.datastax.cassandra</groupId>
<artifactId>cassandra-driver-core</artifactId>
<version>3.6.0</version>
</dependency>
<dependency>
<groupId>com.datastax.cassandra</groupId>
<artifactId>cassandra-driver-mapping</artifactId>
<version>3.6.0</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>19.0</version>
</dependency>

Java 驱动程序

package com.cassandra.javaConnect;

import java.time.Instant;
import java.time.ZoneId;
import java.util.Date;
import java.util.UUID;

import com.datastax.driver.core.BoundStatement;
import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.PreparedStatement;
import com.datastax.driver.core.ResultSet;
import com.datastax.driver.core.Session;

public class CassandraV3Tutorial {

private final static String KEYSPACE_NAME = "example_keyspace";
private final static String REPLICATION_STRATEGY = "SimpleStrategy";
private final static int REPLICATION_FACTOR = 1;
private final static String TABLE_NAME = "example_table";

public static void main(String[] args) {

// Setup a cluster to your local instance of Cassandra
Cluster cluster = Cluster.builder()
.addContactPoint("localhost")
.withPort(9042)
.build();

// Create a session to communicate with Cassandra
Session session = cluster.connect();

// Create a new Keyspace (database) in Cassandra
String createKeyspace = String.format(
"CREATE KEYSPACE IF NOT EXISTS %s WITH replication = " +
"{'class':'%s','replication_factor':%s};",
KEYSPACE_NAME,
REPLICATION_STRATEGY,
REPLICATION_FACTOR
);
session.execute(createKeyspace);

// Create a new table in our Keyspace
String createTable = String.format(
"CREATE TABLE IF NOT EXISTS %s.%s " + "" +
"(id uuid, timestamp timestamp, value double, " +
"PRIMARY KEY (id, timestamp)) " +
"WITH CLUSTERING ORDER BY (timestamp ASC);",
KEYSPACE_NAME,
TABLE_NAME
);
session.execute(createTable);

// Create an insert statement to add a new item to our table
PreparedStatement insertPrepared = session.prepare(String.format(
"INSERT INTO %s.%s (id, timestamp, value) values (?, ?, ?)",
KEYSPACE_NAME,
TABLE_NAME
));

// Some example data to insert
UUID id = UUID.fromString("1e4d26ed-922a-4bd2-85cb-6357b202eda8");
Date timestamp = Date.from(Instant.parse("2018-01-01T01:01:01.000Z"));
double value = 123.45;

// Bind the data to the insert statement and execute it
BoundStatement insertBound = insertPrepared.bind(id, timestamp, value);
session.execute(insertBound);

// Create a select statement to retrieve the item we just inserted
PreparedStatement selectPrepared = session.prepare(String.format(
"SELECT id, timestamp, value FROM %s.%s WHERE id = ?",
KEYSPACE_NAME,
TABLE_NAME));

// Bind the id to the select statement and execute it
BoundStatement selectBound = selectPrepared.bind(id);
ResultSet resultSet = session.execute(selectBound);

// Print the retrieved data
resultSet.forEach(row -> System.out.println(
String.format("Id: %s, Timestamp: %s, Value: %s",
row.getUUID("id"),
row.getTimestamp("timestamp").toInstant().atZone(ZoneId.of("UTC")),
row.getDouble("value"))));

// Close session and disconnect from cluster
session.close();
cluster.close();
}
}

最佳答案

此错误并不意味着您的 Guava 版本错误。该消息是在 cassandra-driver-core-3.2.0 中引入的,请参阅 JAVA-1328JAVA-1435INFO com.datastax.driver.core.GuavaCompatibility - 在类路径中检测到 Guava >= 19,使用现代兼容层 表示驱动程序检测到 Guava 19+ 并且它正在使用某些兼容层进行操作。您可以很好地使用 Guava 20,甚至任何更新的版本。

另一方面,您的错误意味着驱动程序无法在端口 9042 上连接到本地 Cassandra 实例。它要么未启动,要么在不同的端口上启动,或者某些软件(例如防火墙)阻止了它。请确保 cassandra 进程正在运行,并使用例如 netstat 来查看端口 9042 是否被 Cassandra 使用。

关于java - 无法连接到 Cassandra - Cassandra Datastax 驱动程序 3.6 中的 Guava 兼容性问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58126769/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com