我试图在eclipse中编写一个基本的java程序,它使用Cassandra java驱动程序连接到Cassandra节点。
我找到了此存储库https://github.com/datastax/java-driver。
当我尝试使用 -
时package com.example.cassandra;
import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.Session;
import com.datastax.driver.core.Host;
public class SampleConnection {
private Cluster cluster;
private Session session;
public void connect(String node){
cluster = Cluster.builder().addContactPoint(node).build();
session = cluster.connect("mykeyspace");
System.out.println(cluster.getClusterName());
}
public void close()
{
cluster.shutdown();
}
public static void main(String args[]) {
SampleConnection client = new SampleConnection();
client.connect("127.0.0.1");
client.close();
}
1)在eclipse中遇到输出
线程“main”中的异常com.datastax.driver.core.exceptions.NoHostAvailableException:尝试查询的所有主机都失败(尝试:[/ 127.0.0.1])
为什么拒绝连接更不用说创建表了? (9042端口,在cassandra.yaml中配置,打开并且cassandra服务正在运行)
2)为什么在我的代码中, cluster.getClusterName(); 每次都将“cluster1”作为群集名称,而不管我在cassandra.yaml文件中的群集名称是什么?
然而,当我尝试使用以下代码时,它起作用了:
import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.Host;
import com.datastax.driver.core.Session;
import com.datastax.driver.core.policies.DefaultRetryPolicy;
public class CassConnector {
private static Cluster cluster;
private static Session session;
public static Cluster connect(String node) {
return Cluster.builder().addContactPoint(node)
.withRetryPolicy(DefaultRetryPolicy.INSTANCE).build();
}
public static void main(String[] arg) {
cluster = connect("localhost");
session = cluster.connect("mykeyspace");
session.execute("CREATE KEYSPACE myks WITH REPLICATION = "
+ "{ 'class' : 'SimpleStrategy', 'replication_factor' : 1};" );
session.execute("USE mykeyspace");
String query = "CREATE TABLE emp(emp_id int PRIMARY KEY, "
+ "emp_name text, "
+ "emp_city text );";
session.execute(query);
System.out.println("Table created!");
session.close();
cluster.close();
}
这两种方法之间的逻辑区别是什么?
答案 0 :(得分:1)
我假设您指的是Cluster.getClusterName()
。来自the javadoc:
请注意,这不是Cassandra群集名称,而是分配给此Cluster对象的名称。目前,该名称仅用于一个目的:当多个Cluster实例位于同一JVM中时,区分暴露的JMX度量标准(首先应该是罕见的)。该名称可以在群集构建时设置(例如通过
Cluster.Builder.withClusterName(java.lang.String)
),但默认为cluster1
之类的名称,其中同一JVM中的每个群集实例将具有不同的编号。