2015-10-29 10 views
6

Ich verwende Spring-und Spring-Sicherheit und Spring-Session-Data-Redis mit RedisHttpSessionConfiguration zu verwenden, um Sitzungs-IDs bei Redis zu speichern (damit Clients ihre Sitzungen nicht verlieren wenn webapp ausfällt und auf einen anderen Server umgeschaltet wird).Spring-Sitzung auf Redis - was ist der Failover, wenn Redis ist

Meine Frage, was passiert, wenn der Redis-Server ausgefallen ist? Kann die Feder weiterarbeiten, indem die Sitzung im Speicher gespeichert wird, bis Redis wieder aktiv ist? Gibt es eine Möglichkeit, dies so zu konfigurieren?

Ich verwende Redis auf AWS ElastiCache und Failover kann mehrere Minuten dauern, bevor der primäre Ersatzknoten auf dem DNS konfiguriert wird.

+0

Also die Antwort ist nein. Wenn Redis ausfällt, schlägt spring-session-data-rediserve fehl und löst eine Ausnahme aus. Kennt jemand eine Implementierung, die nicht? mit vielleicht Backup-Daten in Memory Map? – Berethor

+0

Ich dachte das gleiche hier. Irgendwelche Neuigkeiten hierzu, bitte updaten. –

Antwort

0

Soweit ich sehen kann, müssen Sie eine Implementierung von CacheErrorHandler (javadoc) bereitstellen.

Sie können dies tun, indem Sie eine Configuration Instanz bereitstellen, die CachingConfigurer implementiert und die Methode errorHandler() überschreibt.

Zum Beispiel:

@Configuration 
@Ena1bleCaching 
public class MyApp extends SpringBootServletInitializer implements CachingConfigurer { 

    @Override 
    public CacheErrorHandler errorHandler() { 

    return MyAppCacheErrorHandler(); 
    } 

} 

genau, wie Sie dann ununterbrochenen Service bieten, ist mir nicht klar - ohne die aktuellen Sitzungen in der Failover-Cache dupliziert, wie es scheint unmöglich.

Wenn Sie ElasticCache verwenden, ist es nicht möglich, dass AWS eine replizierte Konfiguration für Sie übernimmt, sodass, wenn ein Knoten gelöscht wird, die andere übernehmen kann?