Grundsätzlich habe ich eine "DON'T DO THIS" Sentinel-Szenario. Da Sentinel nicht sicher in einem solchen Szenario ist, habe ich folgendesStackExchange.Redis - Wie kann ich die Konfiguration zur Laufzeit ändern?
var main = "192.168.XXX.YY:6379,abortConnect=false";
var backup = "192.168.XXX.YY:6379,abortConnect=false";
IConnectionMultiplexer redis = ConnectionMultiplexer.Connect(main);
redis.ConnectionFailed += (src, args) =>
{
if ((src as ConnectionMultiplexer).Configuration != backup) {
using (var writer = new StringWriter()) {
writer.Write(backup);
(src as ConnectionMultiplexer).Configure(writer);
/**
* Just for checking. It does not save
**/
(src as ConnectionMultiplexer).GetDatabase().StringSet("aaa", "bbb");
}
}
};
So implementiert, wenn meine Hauptverbindung nach unten ist, ich die Konfiguration ändern, durch den Aufruf (src als ConnectionMultiplexer) .Configure (Drehbuch) , damit ConnectionMultiplexer die neue Konfiguration verwenden kann. ConnectionMultiplexer verwendet jedoch weiterhin den alten.
Frage: Wie kann ich ConnectionMultiplexer.configuration im ConnectionFailed-Ereignis ändern?
Die offensichtlichste Antwort, aber ich muss die gleiche Instanz behalten, weil es über die ganze App verteilt ist. Vielleicht könnte ein Ereignis alle Abonnenten benachrichtigen, aber einige Teile meiner App können ihr ursprüngliches Verhalten nicht ändern, einschließlich der Referenz des ConnectionMultiplexer. Trotzdem danke. –
Ich habe irgendwie deinen Kommentar erwartet .. Ich versuche etwas Ähnliches zu tun und ich komme zu einem Punkt, wo ich denke, dass die App einen Zeiger auf die Datenbank haben sollte, nicht auf den Multiplizierer und ich arbeite an diesem Refactoring ... Wenn ich irgendwo mit der sicheren Rekonfiguration komme und wieder verbinde, werde ich teilen .. Frage aber, hast du versucht, beide Hosts in der Verbindungszeichenfolge zu haben und zu sehen, ob der maultiplixer mit dem Szenario fehlgeschlagene Verbindung umgehen kann? –
Wenn ich beide Verbindungen einstelle, werde ich am Ende von mehreren Mastern landen. In diesem Fall verwendet StackExchange.redis das Konzept von TieBreaker, um den "Haupt" -Master aufzulösen. Ich bin mir nicht sicher, ob eine solche Funktionalität mein Problem sicher lösen kann. Ich werde am Montag nachsehen. –