HttpSessionListener Beispiel - Überwachung

1. Übersicht

Dieses Tutorial zeigt, wie Sie einen javax.servlet.http.HttpSessionListener registrieren und die Anzahl der aktiven Sitzungen in der Webanwendung mithilfe von Metriken verfolgen.

2. Den Listener definieren

Wir können den HTTP-Sitzungslistener in der Datei web.xml registrieren :

  com.baeldung.web.SessionListenerWithMetrics  

Alternativ können wir in einer Servlet 3-Umgebung den Listener auch mit dem @WebListener registrieren. In diesem Fall müssen wir die SpringBootApplication-Hauptklasse mit @ServletComponentScan versehen.

Schließlich können wir den Listener auch mithilfe der Java-Konfiguration registrieren, indem wir eine ServletListenerRegistrationBean- Bean deklarieren :

@Bean public ServletListenerRegistrationBean sessionListenerWithMetrics() { ServletListenerRegistrationBean listenerRegBean = new ServletListenerRegistrationBean(); listenerRegBean.setListener(new SessionListenerWithMetrics()); return listenerRegBean; }

3. Der Basic Listener

Der einfache Listener verfolgt jederzeit die Anzahl der aktiven Sitzungen :

public class SessionListenerWithMetrics implements HttpSessionListener { private final AtomicInteger activeSessions; public SessionListenerWithMetrics() { super(); activeSessions = new AtomicInteger(); } public int getTotalActiveSession() { return activeSessions.get(); } public void sessionCreated(final HttpSessionEvent event) { activeSessions.incrementAndGet(); } public void sessionDestroyed(final HttpSessionEvent event) { activeSessions.decrementAndGet(); } }

Der Sitzungslistener wird beim Erstellen der Sitzung ausgelöst - sessionCreated :

HttpSession session = request.getSession();

Und zerstört - sessionDestroyed :

session.invalidate();

Mit diesem Mechanismus kann die aktuelle Sitzungsanzahl vom Listener abgerufen werden. Um jedoch eine Echtzeitüberwachung und -transparenz zu erzielen , benötigen wir zusätzliche Logik, um den Wert tatsächlich abzurufen und zu veröffentlichen.

Hier kommt die Metrikbibliothek ins Spiel - sie enthält mehrere sofort einsatzbereite Reporter, mit denen diese Metrik mit sehr geringem Aufwand veröffentlicht werden kann.

4. Der Listener mit Metriken

Anstatt unsere eigene benutzerdefinierte Überwachungslösung einzuführen, nutzen wir die Metrikbibliothek . wir müssen es unserem pom hinzufügen:

 com.codahale.metrics metrics-core 3.0.1 

Wenn der Metrikkern im Klassenpfad verfügbar ist, können wir denselben HttpSessionListener mit einem Counter- Objekt schreiben :

public class SessionListenerWithMetrics implements HttpSessionListener { private final Counter counterOfActiveSessions; public SessionListenerWithMetrics() { super(); counterOfActiveSessions = MetricRegistrySingleton.metrics.counter("web.sessions.active.count"); } public void sessionCreated(final HttpSessionEvent event) { counterOfActiveSessions.inc(); } public void sessionDestroyed(final HttpSessionEvent event) { counterOfActiveSessions.dec(); } }

Die MetricRegistry - die zentrale Registrierung aller Anwendungsmetriken - wird einfach in einem anwendungsweiten statischen Feld referenziert:

public final class MetricRegistrySingleton { public static final MetricRegistry metrics = new MetricRegistry(); }

Das Veröffentlichen und Bereitstellen dieser Metrik zur Überwachung - beispielsweise für das Standardprotokollierungssystem der Anwendung - ist unkompliziert:

Logger logger = LoggerFactory.getLogger("com.baeldung.monitoring"); Slf4jReporter reporter = Slf4jReporter.forRegistry(metrics).outputTo(logger). convertRatesTo(TimeUnit.SECONDS).convertDurationsTo(TimeUnit.MILLISECONDS).build(); reporter.start(5, TimeUnit.MINUTES);

5. Schlussfolgerung

In diesem Lernprogramm wurde veranschaulicht, wie ein HttpSessionListener im Bereitstellungsdeskriptor der Webanwendung registriert wird und wie die aktive Anzahl von Sitzungen mithilfe von zwei Mechanismen überwacht wird. Der erste Mechanismus ist ein handgerollter Zähler und der zweite basiert auf der ausgereiften Metrikbibliothek .

Die Implementierung finden Sie im Beispiel-GitHub-Projekt.