我一直在寻找这个答案,但没有人证明如何成功地做到这一点。因此,我使用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 服务器时,我没有看到对应用程序的任何影响或弹出控制台对话框。我究竟做错了什么?我在正确的方向吗?