Добавление узла Redis без перезапуска службы - PullRequest
3 голосов
/ 01 мая 2019

Я пытаюсь расширить функцию эластичности добавления / удаления узла к существующему для кластера Redis (не кластеризованный режим), который AWS Elastic Cache предлагает моему приложению.В идеале я хотел бы предотвратить любые прерывания обслуживания или перезапустить приложение для обновленного списка конечных точек.Я использую пакет StackExchange.Redis и не вижу способа добавить или удалить конечную точку из существующего мультиплексора соединения.

То, что я пытаюсь сделать, это поместить значения конечной точки в AWS'Параметр Store, чтобы приложение могло перезагрузить значения при отправке сообщения на подписку, которую приложение ожидает.Как только это сообщение было получено приложением, я создаю новый объект соединения, настраиваю все обработчики событий для нового соединения и заменяю статическое свойство, используемое приложением, оборачивая статический объект в блок блокировки, пока яизменить соединение.

Код PSEUDO

  1. Извлечь массив объектов из хранилища параметров

  2. Loopчерез каждый объект в массиве и добавьте в коллекцию конечных точек новый объект StackExchange.Redis.ConfigurationOptions

  3. Установите локальную переменную для существующего статического объекта соединения

  4. Установить объект статического соединения на новый объект StackExchange.Redis.ConnectionMultiplexer, передав в новый объект StackExchange.Redis.ConfigurationOptions

  5. Переназначить все подписки на новое соединение

  6. Переназначить все события на новое соединение

  7. Lock и переназначить статический объект базы данных StackExchange.Redis.IDatabase, который используется методами save и get, для дескриптора нового подключения к используемой базе данных.

Есть ли лучшийспособ сделать это с помощью пакета StackExchange.Redis?

...