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