go - 不断重新连接到 Cassandra

标签 go cassandra reconnect gocql

我在网上读到,使用 Cassandra 时的最佳实践是在服务的生命周期内拥有 1 个集群 和 1 个 session

我的问题是:

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

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

我们正在使用 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 服务器重新上线之前尝试重新连接?如果不是,这种情况的最佳实践是什么?

最佳答案

特别感谢@Jim Wartnick为了这。我只是尝试在本地计算机上关闭 Cassandra,然后重新打开它,gocql 立即重新连接,而无需在我的问题中使用上述任何代码片段。

只要您的 ClusterSession 至少连接过 Cassandra 一次,即使 Cassandra 出现故障,一旦 Cassandra 恢复,它们也会立即重新连接到它在线。

非常感谢所有提供帮助的人!

关于go - 不断重新连接到 Cassandra,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56002002/

相关文章:

go - 参数和接收器有什么区别

node.js - 使用 winston : Is there a Cassandra transport? 记录

scala - 使用 Scala 读取 Cassandra 中的并行性

cassandra - jdk10升级后嵌入式cassandra不工作

java - LDAP服务器重启后如何重连?

C# WCF 服务在重新连接后重新发送数据?这是什么属性?

sql - 使用数据库/sql 包创建通用代码?

go - 如何将东坐标北坐标转换为经纬度?

go - 在取消 UDP 消息上启动多个计时器

node.js - 如何在 Chrome 中使用 native WebSocket 库重新连接套接字