2

Cassandra を使用する際のベスト プラクティスは、サービスの存続期間中は 1Clusterと 1Sessionを使用することであるとオンラインで読みました。

私の質問は次のとおりです。

  1. Cassandra サーバーがダウンした場合、Cassandra サーバーがオンラインに戻るまでクラスターやセッションが再接続を試行し続けるようにするにはどうすればよいですか?

  2. 再接続を試行するのは、クラスターのみ、セッションのみ、またはその両方ですか?

サービスにはgithub.com/gocql/gocqlを使用Goしています。

ドキュメントで次のスニペットを見た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 サーバーがオンラインに戻るまで再接続を試行するには、上記のいずれかの方法で十分ですか? そうでない場合、このシナリオのベスト プラクティスは何ですか?

4

1 に答える 1

1

@Jim Wartnickに感謝します。ローカルマシンでCassandraをオフにしてからオンに戻しgocql、質問で上記のスニペットを使用せずにすぐに再接続しようとしました.

ClusterCassandra に少なくとも 1 回接続している限り、SessionCassandra がダウンしても、Cassandra がオンラインに戻るとすぐに再接続されます。

助けてくれたみんなに感謝します!

于 2019-05-07T05:56:15.540 に答える