2015-04-13 7 views
6

Мы реализовали провайдер состояния сеанса Redis для нашего веб-приложения, и он работает как шарм, но мне интересно, что произойдет, если сервер redis завершится с ошибкой или веб-сервер не сможет подключиться к серверу redis.Сценарий отказа провайдера сеанса ASP.Net

Есть ли способ использовать управление сеансом InProc Session как переход на резерв Redis? Я не могу найти документацию об объявлении нескольких поставщиков состояния сеанса, поэтому, если redis не удается, система может продолжать работать с использованием inproc. (Я соглашаюсь потерять состояние сеанса в redis и начать с нуля в случае сбоя и потерять снова состояния сеанса inproc и начать с нуля снова, если redis станет доступным)

ответ

0

Вам необходимо определить подчиненный для вашего redis-сервера и использовать redis чтобы отслеживать ваш сервер

+0

Таким образом, нет никакого способа, чтобы настроить альтернативу REDIS как ASP.Net InProc –

+0

Проверить этот билет http://stackoverflow.com/questions/15437334/how-to-tell-a-client-where-the -new-redis-master-is-using-sentinel –

+2

@alirezam Я не верю, что ASP.NET Redis Session State Provider поддерживает redis sentinels. Если вы знаете иначе, я был бы так ОЧЕНЬ счастлив, что ошибся. – Hovis

-1

Я использую библиотеку StackExchange для подключения к серверу redis. Это простой код, который просто показывает, как подписаться на событие и не принимать его окончательное решение. Когда любой сторожевой покупатель выбирает новый сервер, вы получит событие для этого, чтобы вы могли выбрать новый сервер.

ConnectionMultiplexer multiplexer = 
    ConnectionMultiplexer.Connect(new ConfigurationOptions 
    { 
     CommandMap = CommandMap.Sentinel, 
     EndPoints = { { "127.0.0.1", 26379 }, { "127.0.0.1", 26380 } }, 
     AllowAdmin = true, 
     TieBreaker = "", 
     ServiceName = "mymaster", 
     SyncTimeout = 5000 
    }); 
    multiplexer.GetSubscriber().Subscribe("*", (c, m) => 
     { 

      Debug.WriteLine("the message=" + m); 
      Debug.WriteLine("channel=" + c); 

      try 
      { 
       var sentinelServer = multiplexer.GetServer("127.0.0.1", 26379).SentinelGetMasterAddressByName("mymaster"); 
       Debug.WriteLine("Current server=" + sentinelServer); 
       Debug.Flush(); 
      } 
      catch (Exception) 
      { 
       var sentinelServer = multiplexer.GetServer("127.0.0.1", 26380).SentinelGetMasterAddressByName("mymaster"); 
       Debug.WriteLine("Current server=" + sentinelServer); 
       Debug.Flush(); 
      } 
     }); 
+0

Почему этот ответ нисходящий? – Tom

+0

Не могли бы вы подписаться на событие «+ switch-master»? Кроме того, ваш код точно не говорит о том, как этот переключатель выполняется в приложении. Не могли бы вы рассказать о обработчике событий? – Tom

+0

Вам нужно импортировать библиотеки из StackExchange и использовать код в файле global.asax –