Non ho familiarità con Elasticache, ma StackExchange.Redis ConnectionMultiplexer
riproverà automaticamente in background se la connessione viene interrotta e scoprirà i nodi recuperati.
Ovviamente, in caso di errori si ottengono eccezioni quando si accede al database, ma se si trattano gli errori correttamente non sarà necessario ricreare lo ConnectionMultiplexer
.
ho usato il seguente codice di testare questo in cluster modalità standalone e-mode:
var mul = ConnectionMultiplexer.Connect("192.168.15.15:7000,192.168.15.15:7001,...,connectRetry=10,syncTimeout=5000,abortConnect=false,keepAlive=10,allowAdmin=true");
RETRY:
Thread.Sleep(1000);
var k = Guid.NewGuid().ToString();
var v = Guid.NewGuid().ToString();
try
{
var db = mul.GetDatabase();
db.StringSet(k, v);
if (db.StringGet(k).ToString() != v)
{
throw new OperationCanceledException("ABORT");
}
}
catch(RedisServerException ex)
{
Console.WriteLine("Redis Server Exception {0}", ex.Message);
goto RETRY;
}
catch(RedisConnectionException ex)
{
Console.WriteLine("Redis Connection Exception {0}", ex.Message);
goto RETRY;
}
catch(TimeoutException ex)
{
Console.WriteLine("Timeout Exception {0}", ex.Message);
goto RETRY;
}
Console.WriteLine("OK");
goto RETRY;
ho ricevuto tre tipi di eccezioni alla chiusura/sbattere i diversi server: RedisServerException
, RedisConnectionException
e TimeoutException
. E ha smesso di ricevere eccezioni una volta che il server/cluster è attivo e di nuovo in esecuzione.
Ti stai riferendo alla libreria 'StackExchange.Redis'? – thepirat000
Sì - [questo] (https://github.com/StackExchange/StackExchange.Redis) – nirw