1

我一直在尝试使用 gocql 连接到 cosmos cassandra db。

func GetSession(cosmosCassandraContactPoint, cosmosCassandraPort, cosmosCassandraUser, cosmosCassandraPassword string) *gocql.Session {
    clusterConfig := gocql.NewCluster(cosmosCassandraContactPoint)
    port, err := strconv.Atoi(cosmosCassandraPort)
    if err != nil {
        log.Fatal(err)
    }
    clusterConfig.Port = port
    clusterConfig.ProtoVersion = 4
    clusterConfig.Authenticator = gocql.PasswordAuthenticator{Username: cosmosCassandraUser, Password: cosmosCassandraPassword}
    clusterConfig.SslOpts = &gocql.SslOptions{Config: &tls.Config{MinVersion: tls.VersionTLS12}}

    clusterConfig.ConnectTimeout = 10 * time.Second
    clusterConfig.Timeout = 10 * time.Second
    clusterConfig.DisableInitialHostLookup = true

    // uncomment if you want to track time taken for individual queries
    //clusterConfig.QueryObserver = timer{}

    // uncomment if you want to track time taken for each connection to Cassandra
    //clusterConfig.ConnectObserver = timer{}

    session, err := clusterConfig.CreateSession()
    if err != nil {
        log.Fatal("Failed to connect to Azure Cosmos DB", err)
    }

    return session
}

我收到以下错误:

unable to create session: control: unable to connect to initial hosts: Invalid Cosmos DB account or key

不确定这里的问题是什么。

4

2 回答 2

1

您似乎没有为 SSL/TLS 配置配置必要的选项,尤其是证书。

我之前没有连接到 Cosmos DB,所以我不确定所需的证书/密钥,但我之前在这篇文章中帮助某人使用正确的 TLS 设置配置了 gocql 驱动程序 - https://community.datastax.com /问题/3753/

在他们的环境中,他们需要提供用于连接的证书和密钥,如下所示:

certPath, _ := filepath.Abs("/home/erick/astra-bundle/cert")
keyPath, _ := filepath.Abs("/home/erick/astra-bundle/key")
caPath, _ := filepath.Abs("/home/erick/astra-bundle/ca.crt")
cert, _ := tls.LoadX509KeyPair(certPath, keyPath)
caCert, _  := ioutil.ReadFile(caPath)
caCertPool := x509.NewCertPool()
caCertPool.AppendCertsFromPEM(caCert)
tlsConfig := &tls.Config{
    Certificates: []tls.Certificate{cert},
    RootCAs:      caCertPool,
}
cluster.SslOpts = &gocql.SslOptions{
    Config: tlsConfig,
    EnableHostVerification: false,
}

详细信息在上面的帖子中。我希望这有帮助。干杯!

于 2020-08-05T03:00:23.417 回答
0

您的帐户或密钥似乎有误。

首先,请确保您的 API 是 CASSANDRA API。您可以在此处查看。 在此处输入图像描述

其次,请确保您的帐户或密钥是正确的。

COSMOSDB_CASSANDRA_CONTACT_POINT=<value for "CONTACT POINT">
COSMOSDB_CASSANDRA_PORT=<value for "PORT">
COSMOSDB_CASSANDRA_USER=<value for "USERNAME">
COSMOSDB_CASSANDRA_PASSWORD=<value for "PRIMARY PASSWORD">

你可以在这里找到它们: 在此处输入图像描述

更多细节,你可以参考这个文档。希望这可以帮到你。

于 2020-08-05T02:52:59.223 回答