不断重新连接到Cassandra

时间:2019-05-06 09:07:12

标签: go cassandra reconnect gocql

我已经在线阅读了使用Cassandra的最佳实践,即在您的服务生命周期内使用1 Cluster和1 Session

我的问题是:

  1. 如果我们的Cassandra服务器出现故障,如何确保我的集群和/或会话将继续尝试重新连接,直到我们的Cassandra服务器恢复联机?

  2. 仅集群应该尝试重新连接,还是仅尝试会话,或者两者都尝试?

我们正在使用Gogithub.com/gocql/gocql来提供服务。

我在gocql文档中看到了以下代码段,但看起来重试次数有限:

cluster.ReconnectionPolicy = &gocql.ConstantReconnectionPolicy{MaxRetries: 10, Interval: 8 * time.Second}

我还在网上找到了以下代码段,但它看起来并不是专门为处理这种情况而设计的:

var cluster *gocql.ClusterConfig
var session *gocql.Session

func getCassandraSession() *gocql.Session {
    if session == nil || session.Closed() {
        if cluster == nil {
            cluster = gocql.NewCluster("127.0.0.1:9042")
            cluster.Keyspace = "demodb"
            cluster.Consistency = gocql.One
            cluster.ProtoVersion = 4
        }
        var err error
        if session, err = cluster.CreateSession(); err != nil {
            panic(err)
        }
    }
    return session
}

上述任何方法是否足以确保尝试重新连接,直到我们的Cassandra服务器恢复联机?如果没有,这种情况下的最佳实践是什么?

1 个答案:

答案 0 :(得分:0)

特别感谢@Jim Wartnick。我只是尝试在本地计算机上关闭Cassandra,然后再将其重新打开,gocql立即重新连接,而不必在我的问题中使用以上任何片段。

只要您的ClusterSession与Cassandra至少连接一次,即使Cassandra掉线,只要Cassandra重新联机,他们就会立即重新连接。

非常感谢所有帮助过的人!