HttpSessionListener-Beispiel - Überwachung

HttpSessionListener Beispiel - Überwachung

1. Überblick

Dieses Tutorial zeigt, wieregister a javax.servlet.http.HttpSessionListener und die Anzahl der aktiven Sitzungen in der Webanwendung mithilfe vonmetrics verfolgt werden.

2. Den Listener definieren

Wir können den HTTP-Sitzungslistener inweb.xml registrieren:


    
        org.example.web.SessionListenerWithMetrics
    

Alternativ kann in einer Servlet 3-Umgebungwe can use the @WebListener verwendet werden, um auch den Listener zu registrieren. In diesem Fall müssen wir die HauptklasseSpringBootApplication mit@ServletComponentScan. versehen

Schließlich können wir den Listener auch mit der Java-Konfigurationby declaring a ServletListenerRegistrationBean bean registrieren:

@Bean
public ServletListenerRegistrationBean sessionListenerWithMetrics() {
   ServletListenerRegistrationBean listenerRegBean =
     new ServletListenerRegistrationBean<>();

   listenerRegBean.setListener(new SessionListenerWithMetrics());
   return listenerRegBean;
}

3. Der Basic Listener

Der einfache Listener wird jederzeitkeep track of the number of active sessions:

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 ausgelöst, wenn die Sitzung erstellt wird -sessionCreated:

HttpSession session = request.getSession();

Und zerstört -sessionDestroyed:

session.invalidate();

Dieser Mechanismus ermöglicht das Abrufen der aktuellen Sitzungsanzahl vom Listener. Um jedochreal-time monitoring and transparency zu haben, benötigen wir zusätzliche Logik, um den Wert tatsächlich abzurufen und zu veröffentlichen.

Hier kommt die Metrikbibliothek ins Spiel - sie enthältseveral out of the box reporters, 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, setzen wirthe metrics library ein. 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 dieselbenHttpSessionListener mit einemCounter-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();
    }
}

DasMetricRegistry - 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 dieser Metrik und ihre sofortige Verfügbarkeit für die Überwachung - zum Beispiel für das Standardprotokollierungssystem der Anwendung - ist unkompliziert:

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

5. Fazit

In diesem Lernprogramm wurde veranschaulicht, wie einHttpSessionListener 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 Bibliothek des ausgereiftenmetrics.

Die Implementierung kann inthe example github project gefunden werden.