首页 > 解决方案 > CqlSession 无法连接到 Azure Cosmos DB Cassandra

问题描述

我有这个代码

@Bean
public CqlSession getCqlSession() {
    return CqlSession.builder()
            .addContactPoint(new InetSocketAddress(cassandraHost, cassandraPort))
            .withAuthCredentials(cassandraUsername, cassandraPassword)
            .build();
}

连接失败,出现以下异常:

Failed to instantiate [com.datastax.oss.driver.api.core.CqlSession]: Factory method 'getCqlSession' threw
exception; nested exception is com.datastax.oss.driver.api.core.AllNodesFailedException: Could not reach 
any contact point, make sure you've provided valid addresses (showing first 1 nodes, use getAllErrors()
for more): Node(endPoint=tinyurl-cassandra.cassandra.cosmos.azure.com/52.230.23.170:10350, hostId=null,
hashCode=237f706): [com.datastax.oss.driver.api.core.DriverTimeoutException: [s0|control|id: 0xb89dacff,
L:/192.168.0.101:59158 - R:tinyurl-cassandra.cassandra.cosmos.azure.com/52.230.23.170:10350] Protocol
initialization request, step 1 (OPTIONS): timed out after 5000 ms]

我是 Cassandra 的新手,并尝试了以下方法:

  1. 验证凭据没问题。
  2. 尝试使用csqlsh- 也无法连接。
  3. 检查我的机器中没有防火墙设置。可以远程登录到主机和端口。
  4. 可以从 Azure 数据资源管理器打开 Cassandra Shell。

我错过了什么?我是新来的。任何帮助将不胜感激。

标签: azurecassandraazure-cosmosdb

解决方案


看起来您正在使用 v.4x 版本的 Java 驱动程序。此驱动程序中的默认负载平衡要求您提供本地数据中心,例如:

            CqlSession.builder().withSslContext(sc)
            .addContactPoint(new InetSocketAddress(cassandraHost, cassandraPort)).**withLocalDatacenter("UK South")**
            .withAuthCredentials(cassandraUsername, cassandraPassword).build();

您可以查看此入门示例以供进一步参考:https ://github.com/Azure-Samples/azure-cosmos-db-cassandra-java-getting-started-v4


推荐阅读