В принципе, у меня есть сценарий "DON'T DO THIS" Sentinel. Потому что Страж не является безопасным в таком случае, я реализовал следующиеStackExchange.Redis - Как изменить конфигурацию во время выполнения?
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");
}
}
};
Так что, когда мое главное соединение вниз, изменить конфигурацию, с помощью вызова (ЦСИ как ConnectionMultiplexer) .Configure (писатель) , так что ConnectionMultiplexer может использовать новую конфигурацию. Однако ConnectionMultiplexer продолжает использовать старый.
Вопрос: Как я могу изменить ConnectionMultiplexer.configuration в событии ConnectionFailed?
Самый очевидный ответ, но мне нужно сохранить тот же экземпляр, потому что он распространяется по всему приложению. Возможно, событие может уведомить всех подписчиков, но некоторые части моего приложения не могут изменить свое первоначальное поведение, включая ссылку ConnectionMultiplexer. В любом случае, спасибо. –
Я как-то ожидал вашего комментария. Я пытаюсь сделать что-то подобное, и я добираюсь до точки, где, по-моему, приложение должно иметь указатель на базу данных не на Multiplixer, и я работаю над этим рефакторингом ... Если я вернусь где-нибудь с безопасным переконфигурированием и повторным подключением, я поделюсь вопросом. Вопрос: хотя вы пробовали иметь оба узла в строке подключения и посмотреть, может ли maultiplixer обрабатывать сценарий сбоя подключения? –
Если я установил оба соединения, я в конечном итоге столкнулся с проблемой нескольких мастеров. В этом случае StackExchange.redis использует концепцию TieBreaker для разрешения «основного» мастера. Я не уверен, что такая функциональность может безопасно решить мою проблему. Я проверю понедельник. –