Я читал в Интернете, что при использовании Cassandra лучше всего иметь 1 Cluster
и 1 Session
на весь срок службы.
Мои вопросы:
В случае, если наш сервер Cassandra выйдет из строя, как мне убедиться, что мой кластер и/или сеанс будут продолжать попытки повторного подключения до тех пор, пока наш сервер Cassandra не вернется в оперативный режим?
Должен ли только кластер пытаться переподключиться, или только сеанс, или и то, и другое?
Мы используем Go
и github.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 не вернется в оперативный режим? И если нет, то какая лучшая практика для этого сценария?