Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将基于Java的Cassandra客户端连接到Cassandra集群,而不是特定节点?_Java_Cassandra - Fatal编程技术网

如何将基于Java的Cassandra客户端连接到Cassandra集群,而不是特定节点?

如何将基于Java的Cassandra客户端连接到Cassandra集群,而不是特定节点?,java,cassandra,Java,Cassandra,我正在尝试学习Cassandra并设置了一个4节点Cassandra集群。我使用Hector编写了一个Java客户机,它当前连接到集群中一个硬编码的单节点。理想情况下,我希望我的客户端连接到“集群”,而不是特定的节点……因此,如果4个节点中的任何一个出现故障,客户端仍将连接到某个节点。从客户端应用程序的角度来看,这到底是如何工作的?我似乎找不到一个好的解释 我的Hector连接字符串当前,我需要在此处指定特定节点: Cluster c = getOrCreateCluster("Test Clu

我正在尝试学习Cassandra并设置了一个4节点Cassandra集群。我使用Hector编写了一个Java客户机,它当前连接到集群中一个硬编码的单节点。理想情况下,我希望我的客户端连接到“集群”,而不是特定的节点……因此,如果4个节点中的任何一个出现故障,客户端仍将连接到某个节点。从客户端应用程序的角度来看,这到底是如何工作的?我似乎找不到一个好的解释

我的Hector连接字符串当前,我需要在此处指定特定节点:

Cluster c = getOrCreateCluster("Test Cluster", cassandraNode1:9160);

我的Cassandra节点都配置了我的rpc_地址:0.0.0.0

如果将
CassandraHostConfigurator
传递给
getOrCreateCluster()
,则可以将多个节点指定为逗号分隔的字符串:

  public CassandraHostConfigurator(String hosts) {
    this.hosts = hosts;
  }

  ...

  String[] hostVals = hosts.split(",");

  CassandraHost[] cassandraHosts = new CassandraHost[hostVals.length];
  ...

您还可以切换CassandraHostConfigurator#SetAutoDiscoveryHosts和#setUseAutoDiscoverAtStartup,以使用初始主机自动添加通过Thrift API方法描述键空间在上找到的所有主机。这使得配置更加容易,因为您只需要引用单个主机


保持“自动发现”处于启用状态(默认情况下处于禁用状态)会使扩展更容易,因为在发现新节点时会添加新节点。通过JMX也可以添加节点,因此可以随时手动添加节点,尽管每个Hector实例必须添加一次节点

«您只需要引用单个主机»-我认为这是主要问题之一。如果尝试连接到群集时该主机已关闭,则根本无法连接。