Você só deve fornecer o host do Redis Sentinel Server para
RedisSentinel
à medida que obtém a lista ativa de outros servidores redis mestre/escravo do host do Sentinel. Algumas mudanças no
RedisSentinel
foram adicionados recentemente na última v4.0.37 que agora está disponível no MyGet, que inclui registro extra e retornos de chamada de eventos do Redis Sentinel. A nova v4.0.37 API se parece com:var sentinel = new RedisSentinel(sentinelHost, masterName);
Iniciar o RedisSentinel se conectará ao Host do Sentinel e retornará um RedisClientManager pré-configurado (ou seja, pool de conexão redis) com o
var redisManager = sentinel.Start();
Que você pode então registrar no COI com:
container.Register<IRedisClientsManager>(redisManager);
O
RedisSentinel
deve então ouvir as alterações mestre/escravo dos hosts do Sentinel e fazer failover do redisManager adequadamente. As conexões existentes no pool são então descartadas e substituídas por um novo pool para os hosts recém-configurados. Quaisquer conexões ativas fora do pool lançarão exceções de conexão se usadas novamente, na próxima vez que o RedisClient for recuperado do pool, ele será configurado com os novos hosts. Retornos de chamada e registro
Aqui está um exemplo de como você pode usar os novos retornos de chamada para analisar os eventos do 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);
},
};
O log desses eventos também pode ser habilitado configurando o Logging no ServiceStack:
LogManager.LogFactory = new ConsoleLogFactory(debugEnabled:false);
Há também um
FailoverToSentinelHosts()
explícito adicional que pode ser usado para forçar o RedisSentinel
para re-procurar e fazer failover para os hosts mestre/escravo mais recentes, por exemplo:var sentinelInfo = sentinel.FailoverToSentinelHosts();
Os novos hosts estão disponíveis no sentnelInfo retornado:
"Failed over to read/write: {0}, read-only: {1}".Print(
sentinelInfo.RedisMasters, sentinelInfo.RedisSlaves);