Príklad HttpSessionListener - monitorovanie
1. Prehľad
Tento návod ukáže, ako na to zaregistrovať a javax.servlet.http.HttpSessionListener a pomocou metrík sledovať počet aktívnych relácií vo webovej aplikácii.
2. Definovanie poslucháča
Môžeme zaregistrovať poslucháča relácie HTTP v web.xml:
com.baeldung.web.SessionListenerWithMetrics
Prípadne v prostredí Servlet 3 môžeme použiť @WebListener zaregistrovať aj poslucháča. V tomto prípade musíme anotovať hlavné SpringBootApplication trieda s @ServletComponentScan.
Nakoniec môžeme poslucháča zaregistrovať aj pomocou konfigurácie Java vyhlásením a ServletListenerRegistrationBean fazuľa:
@Bean public ServletListenerRegistrationBean sessionListenerWithMetrics () {ServletListenerRegistrationBean listenerRegBean = nový ServletListenerRegistrationBean (); listenerRegBean.setListener (nový SessionListenerWithMetrics ()); návratový poslucháčRegBean; }
3. Základný poslucháč
Jednoduchý poslucháč to urobí sledovať počet aktívnych relácií po celú dobu:
verejná trieda SessionListenerWithMetrics implementuje HttpSessionListener {súkromné konečné AtomicInteger activeSession; public SessionListenerWithMetrics () {super (); activeSessions = new AtomicInteger (); } public int getTotalActiveSession () {return activeSessions.get (); } public void sessionCreated (konečná udalosť HttpSessionEvent) {activeSessions.incrementAndGet (); } public void sessionDestroyed (konečná udalosť HttpSessionEvent) {activeSessions.decrementAndGet (); }}
Pri vytváraní relácie sa spustí poslucháč relácie - sessionCreated:
HttpSession session = request.getSession ();
A zničené - sessionDestroyed:
session.invalidate ();
Tento mechanizmus umožňuje načítať aktuálny počet relácií od poslucháča, ale aby to bolo možné monitorovanie a transparentnosť v reálnom čase, potrebujeme ďalšiu logiku, aby sme hodnotu skutočne získali a zverejnili.
To je miesto, kde prichádza knižnica metrík - prichádza s niekoľkými reportérmi mimo krabičky, ktorí umožňujú zverejnenie tejto metriky s veľmi malým úsilím.
4. Poslucháč s metrikami
Takže namiesto zavedenia nášho vlastného riešenia monitorovania budeme využívať knižnica metrík; budeme musieť pridať do nášho pom:
com.codahale.metrics metriky - jadro 3.0.1
Keď je na triednej ceste k dispozícii metrické jadro, môžeme napísať to isté HttpSessionListener pomocou a Počítadlo objekt:
verejná trieda SessionListenerWithMetrics implementuje HttpSessionListener {private final Counter counterOfActiveSessions; public SessionListenerWithMetrics () {super (); counterOfActiveSessions = MetricRegistrySingleton.metrics.counter ("web.sessions.active.count"); } public void sessionCreated (konečná udalosť HttpSessionEvent) {counterOfActiveSessions.inc (); } public void sessionDestroyed (konečná udalosť HttpSessionEvent) {counterOfActiveSessions.dec (); }}
The Metrická registrácia - centrálny register všetkých metrík aplikácie - jednoducho sa naň odkazuje v statickom poli pre celú aplikáciu:
public final class MetricRegistrySingleton {public static final MetricRegistry metrics = new MetricRegistry (); }
Publikovanie tejto metriky a jej okamžité sprístupnenie na sledovanie - napríklad do štandardného systému protokolovania aplikácie - je jednoduché:
Logger logger = LoggerFactory.getLogger ("com.baeldung.monitoring"); Reportér Slf4jReporter = Slf4jReporter.forRegistry (metriky). VýstupTo (protokolovač). convertRatesTo (TimeUnit.SECONDS) .convertDurationsTo (TimeUnit.MILLISECONDS) .build (); reporter.start (5, TimeUnit.MINUTES);
5. Záver
Tento návod ilustroval, ako zaregistrovať a HttpSessionListener v deskriptore nasadenia webovej aplikácie a ako sledovať aktívny počet relácií pomocou dvoch mechanizmov. Prvý mechanizmus je ručne valcované počítadlo a druhý je založený na zrelom metriky knižnica.
Implementáciu nájdete v príklade projektu GitHub.