Трябва да предоставяте само хоста на Redis Sentinel Server на RedisSentinel
тъй като получава активния списък на други главни/подчинени редис сървъри от хоста Sentinel.
Някои промени в RedisSentinel
бяха добавени наскоро в най-новата v4.0.37 това вече е достъпно в MyGet, което включва допълнително регистриране и обратни извиквания на събития Redis Sentinel. Новата v4.0.37 API изглежда така:
var sentinel = new RedisSentinel(sentinelHost, masterName);
Стартирането на RedisSentinel ще се свърже със Sentinel Host и ще върне предварително конфигуриран RedisClientManager (т.е. пул за връзки на redis) с активния
var redisManager = sentinel.Start();
Което след това можете да се регистрирате в МОК с:
container.Register<IRedisClientsManager>(redisManager);
RedisSentinel
след това трябва да слуша промените главен/подчинен от хостовете на Sentinel и превключва redisManager съответно. След това съществуващите връзки в пула се изхвърлят и заменят с нов пул за новоконфигурираните хостове. Всички активни връзки извън пула ще хвърлят изключения за връзка, ако се използват отново, следващия път, когато RedisClient бъде извлечен от пула, той ще бъде конфигуриран с новите хостове.
Обратни повиквания и регистриране
Ето пример за това как можете да използвате новите обратни извиквания, за да интроспектирате събитията на RedisServer:
var sentinel = new RedisSentinel(sentinelHost, masterName)
{
OnFailover = manager =>
{
"Redis Managers were Failed Over to new hosts".Print();
},
OnWorkerError = ex =>
{
"Worker error: {0}".Print(ex);
},
OnSentinelMessageReceived = (channel, msg) =>
{
"Received '{0}' on channel '{1}' from Sentinel".Print(channel, msg);
},
};
Регистрирането на тези събития може също да бъде активирано чрез конфигуриране на влизане в ServiceStack:
LogManager.LogFactory = new ConsoleLogFactory(debugEnabled:false);
Има и допълнителен изричен FailoverToSentinelHosts()
който може да се използва за принудително използване на RedisSentinel
за повторно търсене и преминаване към най-новите главни/подчинени хостове, напр.:
var sentinelInfo = sentinel.FailoverToSentinelHosts();
Новите хостове са налични във върнатата sentinelInfo:
"Failed over to read/write: {0}, read-only: {1}".Print(
sentinelInfo.RedisMasters, sentinelInfo.RedisSlaves);