Primjer HttpSessionListener - praćenje

1. Pregled

Ovaj vodič će pokazati kako registrirati a javax.servlet.http.HttpSessionListener i pomoću mjernih podataka pratite broj aktivnih sesija u web aplikaciji.

2. Utvrđivanje slušatelja

Slušatelja HTTP sesije možemo registrirati u web.xml:

  com.baeldung.web.SessionListenerWithMetrics 

Alternativno, u okruženju Servlet 3, možemo koristiti @WebListener da registrira i slušatelja. U ovom slučaju, moramo napomenuti glavno SpringBootApplication razred sa @ServletComponentScan.

Napokon, slušatelja možemo registrirati i pomoću Java konfiguracije proglašavanjem a ServletListenerRegistrationBean grah:

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

3. Osnovni slušatelj

Jednostavni slušatelj hoće vodite evidenciju o broju aktivnih sesija u svakom trenutku:

javna klasa SessionListenerWithMetrics implementira HttpSessionListener {private final AtomicInteger activeSessions; javni SessionListenerWithMetrics () {super (); activeSessions = novi AtomicInteger (); } javni int getTotalActiveSession () {povratak activeSessions.get (); } javni void sessionCreated (konačni događaj HttpSessionEvent) {activeSessions.incrementAndGet (); } javna void sessionDestroyed (konačni događaj HttpSessionEvent) {activeSessions.decrementAndGet (); }}

Slušatelj sesije pokrenut će se kad se sesija kreira - sessionCreate:

HttpSession sesija = request.getSession ();

I uništeno - sjednicaUništena:

session.invalidate ();

Ovaj mehanizam omogućuje dohvaćanje trenutnog broja sesija od slušatelja, ali da bi se imao praćenje i transparentnost u stvarnom vremenu, potrebna nam je dodatna logika da zapravo dohvatimo vrijednost i objavimo je.

Tu dolazi metrička biblioteka - dolazi s nekoliko izvanrednih novinara koji omogućuju objavljivanje ove metrike uz vrlo malo truda.

4. Slušatelj s mjernim podacima

Dakle, umjesto da predstavimo vlastito prilagođeno rješenje za praćenje, iskoristit ćemo biblioteka metrike; trebat ćemo ga dodati u naš pom:

 com.codahale.metrics metrics-core 3.0.1 

Budući da je jezgra metrike dostupna na putu predavanja, možemo pisati isto HttpSessionListener pomoću a Brojač objekt:

javna klasa SessionListenerWithMetrics implementira HttpSessionListener {private final Counter counterOfActiveSessions; javni SessionListenerWithMetrics () {super (); counterOfActiveSessions = MetricRegistrySingleton.metrics.counter ("web.sessions.active.count"); } javna void sessionCreated (konačni događaj HttpSessionEvent) {counterOfActiveSessions.inc (); } javna void sessionDestroyed (konačni događaj HttpSessionEvent) {counterOfActiveSessions.dec (); }}

The MetricRegistry - središnji registar svih mjernih podataka aplikacije - jednostavno se navodi u statičkom polju širokom za aplikaciju:

javna završna klasa MetricRegistrySingleton {javna statička konačna MetricRegistry metrika = nova MetricRegistry (); }

Objava ove metrike i omogućavanje lako dostupnosti za nadgledanje - na primjer, standardnom sustavu evidentiranja aplikacije - jednostavno je:

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. Zaključak

Ovaj je vodič ilustrirao kako registrirati a HttpSessionListener u opisu implementacije web aplikacije i kako nadzirati aktivni broj sesija pomoću dva mehanizma. Prvi mehanizam je ručno valjani brojač, a drugi se temelji na zrelom metrika knjižnica.

Implementacija se može naći u primjeru GitHub projekta.