Java中的Cassandra - 每次都有相同的集群名称

时间:2016-02-25 06:52:06

标签: java eclipse cassandra

我试图在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();
   }

这两种方法之间的逻辑区别是什么?

1 个答案:

答案 0 :(得分:1)

我假设您指的是Cluster.getClusterName()。来自the javadoc

  

请注意,这不是Cassandra群集名称,而是分配给此Cluster对象的名称。目前,该名称仅用于一个目的:当多个Cluster实例位于同一JVM中时,区分暴露的JMX度量标准(首先应该是罕见的)。该名称可以在群集构建时设置(例如通过Cluster.Builder.withClusterName(java.lang.String)),但默认为cluster1之类的名称,其中同一JVM中的每个群集实例将具有不同的编号。