Ошибки подключения к Redis при использовании клиента Booksleeve Redis на виртуальной машине Azure.

Недавно я начал размещать свой побочный проект на новых виртуальных машинах Azure. Приложение использует Redis в качестве кеша в памяти. Все работало нормально в моей локальной среде, но теперь, когда я переместил код в Azure, я вижу некоторые странные исключения, исходящие из Booksleeve.

При первом запуске приложения все работает нормально. Однако примерно через 5-10 минут бездействия следующий запрос к приложению вызывает сетевое исключение (я сейчас на работе и у меня нет точных сообщений об ошибках, поэтому я опубликую их, когда вернусь домой, если люди думают, что они имеют отношение к обсуждению) Это приводит к закрытию внутренней MessageQueue, что приводит к тому, что каждый последующий Enqueue() генерирует исключение («Очередь закрыта»).

Итак, немного погуглив, я нашел этот пост SO: Поддержание открытого соединения Redis с помощью BookSleeveо самодельном менеджере соединений. Я, конечно, могу реализовать что-то подобное, если это лучший способ действий.

Итак, вопросы:

  1. Является ли нормальным периодическое закрытие RedisConnection через определенное время?
  2. Я встречал метод conn.SetKeepAlive(), но пробовал много разных значений, и ни одно из них не помогло.Есть ли в этом что-то еще, или я лаю не по тому дереву?
  3. Является ли идея диспетчера соединений из сообщения выше лучшим способом справиться с этим сценарием?
  4. Может ли кто-нибудь пролить дополнительный свет на то, почему размещение моего экземпляра Redis на новой виртуальной машине Azure вызывает эту проблему? Я также могу подтвердить, что если я запускаю свою локальную среду на виртуальной машине Azure Redis, у меня возникает эта проблема.

Как я уже сказал, если подключение к Redis не работает после бездействия, я опубликую трассировку стека и исключения из своих журналов, когда вернусь домой.

Спасибо!

ОБНОВЛЕНИЕ Дидье указал в комментариях, что это может быть связано с балансировщиком нагрузки, который использует Azure: http://blogs.msdn.com/b/avkaschauhan/archive/2011/11/12/windows-azure-load- balancer-timeout-details.aspx

Если предположить, что это так, как лучше всего реализовать диспетчер соединений, который мог бы объяснить эту дурацкую проблему. Я предполагаю, что мне не следует создавать соединение на единицу работы, верно?

6
задан Community 23 May 2017 в 10:34
поделиться