Я искал этот ответ повсюду, но никто не продемонстрировал, как это сделать. Итак, я взял некоторый код из отработки отказа 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. Что я делаю не так? Я в правильном направлении?