나는 datastax java 드라이버 3.1.0을 사용하여 cassandra 클러스터에 연결했으며 cassandra 클러스터 버전은 2.0.10입니다.datastax java driver를 사용하여 로컬 cassandra 노드에 연결 하시겠습니까?
다음은 cassandra 클러스터에 연결하는 데 사용하는 싱글 톤 클래스입니다.
public class CassUtil {
private static final Logger LOGGER = Logger.getInstance(CassUtil.class);
private Session session;
private Cluster cluster;
private static class Holder {
private static final CassUtil INSTANCE = new CassUtil();
}
public static CassUtil getInstance() {
return Holder.INSTANCE;
}
private CassUtil() {
List<String> servers = TestUtils.HOSTNAMES;
String username =
TestUtils.loadCredentialFile().getProperty(TestUtils.USERNAME);
String password =
TestUtils.loadCredentialFile().getProperty(TestUtils.PASSWORD);
// is this right setting?
PoolingOptions poolingOptions = new PoolingOptions();
poolingOptions.setConnectionsPerHost(HostDistance.LOCAL, 4, 10).setConnectionsPerHost(
HostDistance.REMOTE, 2, 4);
Builder builder = Cluster.builder();
cluster =
builder
.addContactPoints(servers.toArray(new String[servers.size()]))
.withRetryPolicy(DowngradingConsistencyRetryPolicy.INSTANCE)
.withPoolingOptions(poolingOptions)
.withReconnectionPolicy(new ConstantReconnectionPolicy(100L))
.withLoadBalancingPolicy(
DCAwareRoundRobinPolicy
.builder()
.withLocalDc(
!TestUtils.isProduction() ? "DC2" : TestUtils.getCurrentLocation()
.get().name().toLowerCase()).build())
.withCredentials(username, password).build();
try {
session = cluster.connect("testkeyspace");
StringBuilder sb = new StringBuilder();
Set<Host> allHosts = cluster.getMetadata().getAllHosts();
for (Host host : allHosts) {
sb.append("[");
sb.append(host.getDatacenter());
sb.append(host.getRack());
sb.append(host.getAddress());
sb.append("]");
}
LOGGER.logInfo("connected: " + sb.toString());
} catch (NoHostAvailableException ex) {
LOGGER.logError("error= ", ExceptionUtils.getStackTrace(ex));
} catch (Exception ex) {
LOGGER.logError("error= " + ExceptionUtils.getStackTrace(ex));
}
}
public void shutdown() {
LOGGER.logInfo("Shutting down the whole cassandra cluster");
if (null != session) {
session.close();
}
if (null != cluster) {
cluster.close();
}
}
public Session getSession() {
if (session == null) {
throw new IllegalStateException("No connection initialized");
}
return session;
}
public Cluster getCluster() {
return cluster;
}
}
내가 먼저 지역 카산드라 노드에 연결하는 데 사용할 필요가 다운 된 경우 만 원격 노드 이야기의 설정 무엇입니까. 또한 위의 코드에서 사용하고있는 풀링 구성 옵션이 여기에 있습니다.
각 데이터 센터에 3 개의 노드가없는 경우 '3'을 지정하면 어떻게됩니까? 또는 데이터 센터의 기계 수가 많아야합니까? – john
3은 천장이므로 원격 DC에 노드가 2 개 밖에없는 경우 2에 연결됩니다. –
datastax java driver [여기] (http://stackoverflow.com/questions/41757029)와 관련된 질문이 하나 더 있습니다./바인딩 방법 - 바인드 - 값 - 바인딩 - 문 -에서 - 제네릭 방식 - 사용 - datastax - 자바 드라이브). 네가 나를 도울 수 있는지 알고 싶니? – john