2015-04-13 33 views
6

Dostaliśmy dostawcę stanu sesji Redis do naszej aplikacji internetowej i działa jak urok, ale zastanawiam się, co się stanie, jeśli serwer redis się nie powiedzie lub serwer internetowy nie może połączyć się z serwerem redis.Scenariusz przełączania awaryjnego dostawcy stanu sesji ASP.Net

Czy istnieje sposób na wykorzystanie zarządzania stanem sesji InProc jako przełączenie awaryjne usługi Redis? Nie mogę znaleźć dokumentacji na temat deklarowania wielu dostawców stanu sesji, więc jeśli ponawia się awarię, system może kontynuować pracę z użyciem inproc. (Akceptuję, że tracę stany sesji w trybie redis i zaczynam od zera w przypadku niepowodzenia i ponownie tracę stan sesji inproc i rozpoczynam od nowa, jeśli dostępne stają się czerwone)

Odpowiedz

0

Musisz zdefiniować urządzenie podrzędne dla swojego serwera redis i użyć polecenia redis wartownik do monitorowania twojego serwera

+0

Więc nie ma sposobu, aby skonfigurować alternatywę Redis jak ASP.Net InProc –

+0

Sprawdź ten bilet http://stackoverflow.com/questions/15437334/how-to-tell-a-client-where-the -new-redis-master-is-using-sentinel –

+2

@alirezam Nie wierzę, że dostawca stanu sesji ASP.NET Redis obsługuje statuty redis. Jeśli wiesz inaczej, byłbym tak bardzo szczęśliwy, że się mylę. – Hovis

-1

Używam biblioteki StackExchange do łączenia się z serwerem redis. To tylko prosty kod, który pokazuje, jak zasubskrybować wydarzenie i nie traktować go jako ostatecznego rozwiązania. Kiedykolwiek wartownik wybierze nowy serwer, otrzyma zdarzenie dla tego, abyś mógł wybrać nowy serwer.

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

Dlaczego ta odpowiedź została odrzucona? – Tom

+0

Czy nie subskrybujesz wydarzenia "+ switch-master"? Twój kod nie określa dokładnie, w jaki sposób przełączenie jest wykonywane w aplikacji. Czy mógłbyś rozwinąć obsługę zdarzeń? – Tom

+0

Musisz zaimportować biblioteki z StackExchange i użyć kodu w pliku global.asax –