Как подписаться на Sentinel для мониторинга переключения главного сервера Redis во время аварийного переключения в моем приложении?

Я искал этот ответ повсюду, но никто не продемонстрировал, как это сделать. Итак, я взял некоторый код из отработки отказа Redis с помощью StackExchange. / Sentinel из 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, развернутым на текущем сервере. Затем я пытаюсь подписаться на событие "+switch-master" Sentinel. Обработчик событий WriteToConsole — это простой метод, который просто сообщает мне, что мое приложение на самом деле прослушивает событие.

Я хочу в конечном итоге добавить логику в метод заполнителя WriteToConsole, чтобы переключиться на новый главный сервер Redis.

Но эта установка не работает. Я не вижу никакого влияния на приложение или всплывающее диалоговое окно консоли, когда я останавливаю главный сервер Redis, контролируемый рассматриваемым Sentinel. Что я делаю не так? Я в правильном направлении?


person Tom    schedule 03.05.2016    source источник
comment
Обратите внимание, что публикация/подписка не гарантирует обмена сообщениями. Эти события могут быть потеряны. Я предлагаю использовать библиотеку, которая поддерживает Sentinel: ServiceStack, Redis (платно) или csredis (пока не поддерживает Redis 3)   -  person Bruno Garcia    schedule 05.05.2016