HttpSessionListener Eksempel - Overvågning

1. Oversigt

Denne vejledning viser, hvordan man gør det registrer en javax.servlet.http.HttpSessionListener og spore antallet af aktive sessioner i webapplikationen ved hjælp af metrics.

2. Definition af lytteren

Vi kan registrere HTTP-session-lytteren i web.xml:

  com.baeldung.web.SessionListenerWithMetrics 

Alternativt i et Servlet 3-miljø, vi kan bruge @WebListener at registrere lytteren også. I dette tilfælde er vi nødt til at kommentere det vigtigste SpringBoot-applikation klasse med @ServletComponentScan.

Endelig kan vi også registrere lytteren ved hjælp af Java-konfiguration ved at erklære en ServletListenerRegistrationBean bønne:

@Bean public ServletListenerRegistrationBean sessionListenerWithMetrics () {ServletListenerRegistrationBean listenerRegBean = ny ServletListenerRegistrationBean (); listenerRegBean.setListener (ny SessionListenerWithMetrics ()); returner lytterRegBean; }

3. Den grundlæggende lytter

Den enkle lytter vil holde styr på antallet af aktive sessioner på alle tidspunkter:

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

Sessionslytteren udløses, når sessionen oprettes - session Oprettet:

HttpSession session = request.getSession ();

Og ødelagt - session Ødelagt:

session.invalidate ();

Denne mekanisme gør det muligt at hente den aktuelle sessionstælling fra lytteren, men for at have realtidsovervågning og gennemsigtighed, vi har brug for yderligere logik for faktisk at hente værdien og offentliggøre den.

Det er her, metrics-biblioteket kommer ind - det kommer med adskillige journalister, der ikke er i boksen, der gør det muligt at offentliggøre denne metric med meget lidt indsats.

4. Lytteren med målinger

Så i stedet for at udrulle vores egen tilpassede overvågningsløsning, udnytter vi metrics-biblioteket; vi bliver nødt til at tilføje det til vores pom:

 com.codahale.metrics metrics-core 3.0.1 

Med metrics core er tilgængelig på klassestien, kan vi skrive det samme HttpSessionListener ved hjælp af en Tæller objekt:

offentlig klasse SessionListenerWithMetrics implementerer 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 (); }}

Det Metrisk registrering - det centrale register over alle applikationsmålinger - henvises simpelthen til i et applikationsbredt statisk felt:

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

Det er ligetil at offentliggøre denne metric og gøre den let tilgængelig til overvågning - for eksempel til applikationens standardlogningssystem:

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. Konklusion

Denne vejledning illustrerede, hvordan man registrerer en HttpSessionListener i implementeringsbeskrivelsen for webapplikationen og hvordan man overvåger det aktive antal sessioner ved hjælp af to mekanismer. Den første mekanisme er en håndrullet tæller, og den anden er baseret på den modne målinger bibliotek.

Implementeringen kan findes i eksemplet med GitHub-projektet.


$config[zx-auto] not found$config[zx-overlay] not found