如何在应用程序故障转移期间订阅Sentinel以监控Redis主服务器交换机?

时间:2016-05-03 21:21:21

标签: c# caching redis stackexchange.redis redis-sentinel

我一直在寻找这个答案,但没有人证明如何成功地做到这一点。所以,我从Redis failover with StackExchange / Sentinel from C#获取了一些代码并创建了一个简单的代码块:

        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服务器时,我看不到对应用程序有任何影响或控制台对话框弹出。我究竟做错了什么?我正朝着正确的方向前进吗?

0 个答案:

没有答案