2

私はこの答えをずっと探してきましたが、これを成功させる方法を示した人は誰もいません。そこで、C# の StackExchange / Sentinel を使用した Redis フェールオーバーからいくつかのコードを取得し、単純なコード ブロックを作成しました。

        public static void Failover()
        {
            List<RedisConnection> redisConnections = _GetRedisConnections();
            ConfigurationOptions configOpt = _CreateRedisConfiguration(CommandMap.Sentinel, null, redisConnections);
            ConnectionMultiplexer cm = ConnectionMultiplexer.Connect(configOpt);
            cm.GetSubscriber().Subscribe("+switch-master", WriteToConsole);
        }

        private List<RedisConnection> _GetRedisConnections()
        {
            List<RedisConnection> redisConnections = new List<RedisConnection>();
            RedisConnection rc1 = new RedisConnection("localhost", 26379);
            redisConnections.Add(rc1);
            return redisConnections;
        }

        private ConfigurationOptions _CreateRedisConfiguration(CommandMap commandMap, string password, List<RedisConnection> connections)
        {
            ConfigurationOptions connection = new ConfigurationOptions
            {
                CommandMap = commandMap,
                AbortOnConnectFail = true,
                AllowAdmin = true,
                TieBreaker = string.Empty
            };

            connections.ForEach(s => {connection.EndPoints.Add(s.Host, .Port);});

            return connection;
        } 

        private void WriteToConsole(RedisChannel channel, RedisValue value)
        {
            Debug.WriteLine("Hello!");
        }

ここでFailover()は、アプリケーションの起動時にメソッドが呼び出されます。この方法では、現在のサーバーにデプロイされた Sentinel サーバーへの接続を作成するだけです。次に、Sentinel の「+switch-master」イベントにサブスクライブしようとします。イベント ハンドラーWriteToConsoleは、アプリケーションが実際にイベントをリッスンしていることを通知するだけの単純なメソッドです。

WriteToConsole最終的にはプレースホルダー メソッド内にロジックを追加して、新しいマスター Redis サーバーに切り替えることができるようにしたいと考えています。

しかし、この設定はうまくいきません。問題の Sentinel によって監視されているマスター Redis サーバーを停止しても、アプリケーションまたはコンソール ダイアログ ポップアップに何の影響も見られません。私は何を間違っていますか?私は正しい方向にいますか?

4

0 に答える 0