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.