HttpSessionListener példa - figyelés

1. Áttekintés

Ez az oktatóanyag megmutatja, hogyan kell regisztráció a javax.servlet.http.HttpSessionListener és metrikák segítségével kövesse nyomon az aktív munkamenetek számát a webalkalmazásban.

2. A hallgató meghatározása

Regisztrálhatjuk a HTTP munkamenet figyelőt a web.xml:

  com.baeldung.web.SessionListenerWithMetrics 

Alternatív megoldásként egy Servlet 3 környezetben, használhatjuk a @WebListener hogy a hallgatót is regisztrálja. Ebben az esetben meg kell jegyeznünk a főt SpringBootApplication osztályban @ServletComponentScan.

Végül regisztrálhatjuk a hallgatót a Java konfiguráció segítségével is kijelentésével a ServletListenerRegistrationBean bab:

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

3. Az alapfigyelő

Az egyszerű hallgató megteszi kövesse nyomon az aktív munkamenetek számát mindenkor:

public class SessionListenerWithMetrics megvalósítja a HttpSessionListener {privát végleges AtomicInteger activeSession-eket; public SessionListenerWithMetrics () {super (); activeSessions = új AtomicInteger (); } public int getTotalActiveSession () {return activeSessions.get (); } public void sessionCreated (utolsó HttpSessionEvent esemény) {activeSessions.incrementAndGet (); } public void sessionDestroyed (utolsó HttpSessionEvent esemény) {activeSessions.decrementAndGet (); }}

A munkamenet-figyelő a munkamenet létrehozásakor aktiválódik - sessionCreated:

HttpSession session = request.getSession ();

És elpusztult - sessionDestroyed:

session.invalidate ();

Ez a mechanizmus lehetővé teszi az aktuális munkamenetek számának lekérését a hallgatótól, de annak érdekében valós idejű monitorozás és átláthatóság, további logikára van szükségünk az érték tényleges lekéréséhez és közzétételéhez.

Itt jön be a metrikakönyvtár - a dobozban lévő újságírókkal együtt több is rendelkezésre áll, amelyek lehetővé teszik ennek a mutatónak a közzétételét nagyon kevés erőfeszítéssel.

4. A figyelő a mutatókkal

Tehát ahelyett, hogy saját egyedi felügyeleti megoldást vezetnénk be, kihasználjuk a metrikák könyvtárát; hozzá kell adnunk a pomunkhoz:

 com.codahale.metrics metrics-core 3.0.1 

A metrikák alapja elérhető az osztályúton, ugyanezt megírhatjuk HttpSessionListener használva Számláló tárgy:

public class SessionListenerWithMetrics megvalósítja a HttpSessionListener {private final Counter counterOfActiveSessions; public SessionListenerWithMetrics () {super (); counterOfActiveSessions = MetricRegistrySingleton.metrics.counter ("webesszekciók.aktív.szám"); } public void sessionCreated (utolsó HttpSessionEvent esemény) {counterOfActiveSessions.inc (); } public void sessionDestroyed (végső HttpSessionEvent esemény) {counterOfActiveSessions.dec (); }}

A MetricRegistry - az összes alkalmazásmutató központi nyilvántartása - egyszerűen hivatkozás az alkalmazás egészére kiterjedő statikus mezőbe:

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

A mutató közzététele és nyomon követhetővé tétele - például az alkalmazás szokásos naplózási rendszere számára - egyszerű:

Naplózó naplózó = LoggerFactory.getLogger ("com.baeldung.monitoring"); Slf4jReporter riporter = Slf4jReporter.forRegistry (metrika) .outputTo (naplózó). convertRatesTo (TimeUnit.SECONDS) .convertDurationsTo (TimeUnit.MILLISECONDS) .build (); riporter.start (5, TimeUnit.MINUTES);

5. Következtetés

Ez az oktatóanyag bemutatja, hogyan kell regisztrálni a HttpSessionListener a webalkalmazás telepítési leírásában, és hogyan figyelheti meg a munkamenetek aktív számát két mechanizmus segítségével. Az első mechanizmus egy kézzel hengerelt számláló, a második pedig az éretten alapul metrikák könyvtár.

A megvalósítás megtalálható a példa GitHub projektben.