Contoh HttpSessionListener - Monitoring

1. Ikhtisar

Tutorial ini akan menunjukkan cara mendaftarkan javax.servlet.http.HttpSessionListener dan melacak jumlah sesi aktif di aplikasi web menggunakan metrik.

2. Mendefinisikan Pendengar

Kita dapat mendaftarkan pendengar Sesi HTTP di web.xml :

  com.baeldung.web.SessionListenerWithMetrics  

Alternatifnya, di lingkungan Servlet 3, kita dapat menggunakan @WebListener untuk mendaftarkan pendengar juga. Dalam kasus ini, kita perlu memberi anotasi kelas SpringBootApplication utama dengan @ServletComponentScan.

Terakhir, kita juga dapat mendaftarkan pendengar menggunakan konfigurasi Java dengan mendeklarasikan kacang ServletListenerRegistrationBean :

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

3. Pendengar Dasar

Pendengar sederhana akan melacak jumlah sesi aktif setiap saat:

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

Pemroses sesi akan dipicu saat sesi dibuat - sessionCreated :

HttpSession session = request.getSession();

Dan dihancurkan - sessionDestroyed :

session.invalidate();

Mekanisme ini memungkinkan jumlah sesi saat ini diambil dari pendengar, tetapi untuk memiliki pemantauan dan transparansi waktu nyata , kami memerlukan logika tambahan untuk benar-benar mengambil nilai dan memublikasikannya.

Di sinilah pustaka metrik berperan - ia hadir dengan beberapa reporter yang tidak biasa yang memungkinkan metrik ini diterbitkan dengan sedikit usaha.

4. Pendengar Dengan Metrik

Jadi, alih-alih meluncurkan solusi pemantauan khusus kami sendiri, kami akan memanfaatkan pustaka metrik ; kita perlu menambahkannya ke pom kita:

 com.codahale.metrics metrics-core 3.0.1 

Dengan metrik inti tersedia di classpath, kita dapat menulis HttpSessionListener yang sama menggunakan objek Counter :

public class SessionListenerWithMetrics implements 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(); } }

The MetricRegistry - registri sentral dari semua metrik aplikasi - hanya dirujuk dalam sebuah aplikasi bidang luas statis:

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

Memublikasikan metrik ini dan membuatnya tersedia untuk dipantau - misalnya ke sistem logging standar aplikasi - sangatlah mudah:

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

Tutorial ini mengilustrasikan cara mendaftarkan HttpSessionListener di deskriptor penerapan aplikasi web dan cara memantau jumlah sesi aktif menggunakan dua mekanisme. Mekanisme pertama adalah penghitung linting tangan dan yang kedua didasarkan pada pustaka metrik yang matang .

Implementasinya dapat ditemukan di contoh proyek GitHub.