Нужно ли отписываться от StackExchange.Redis? - PullRequest
2 голосов
/ 27 марта 2020

Я работаю над несколькими Azure веб-заданиями, которые используют Redis для кэширования и трансляции сообщений. Каждое задание выполняется непрерывно (как консольное приложение) и может иметь несколько экземпляров в любое время (в зависимости от правил масштабирования). Когда задание запускается, оно подписывается на канал Redis для получения уведомлений:

...
var subscriber = multiplexer.GetSubscriber();

await (subscriber.SubscribeAsync("channel", HandleMessage));
...

private void HandleMessage(RedisChannel channel, RedisValue value)
{
    ...
}

Мы используем StackExchange.Redis 1.2.6.

Моя проблема заключается в том, что я не могу определить, когда Экземпляр закрывается, поэтому у меня нет места, где я могу надежно позвонить UnsubscribeAll() - все, что я пробовал до сих пор, не работает:

  • Событие AppDomain.Unload
  • AppDomain.ProcessExit event
  • WebJobsShutdownWatcher

До сих пор я проводил только локальное тестирование по этому вопросу. Я не уверен, что делаю что-то не так - есть много вопросов об обнаружении выключения веб-работы - я (и все мои коллеги) закрываю локальные задания, используя Ctrl- C или нажимая X в окне консоли так что процесс просто убивается - никаких событий не происходит. Из-за этого я не могу протестировать ни одно из своих решений локально. Неправильно позволять процессу завершаться без очистки, но я не могу придумать никакого другого решения.

Нужно ли отписываться от канала Redis или безопасно забыть об этом? (В качестве альтернативы, может ли какое-либо из моих решений работать надежно в Azure?)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...