Contoh HttpSessionListener - Pemantauan

1. Gambaran keseluruhan

Tutorial ini akan menunjukkan cara mendaftar javax.servlet.http.HttpSessionListener dan mengesan jumlah sesi aktif dalam aplikasi web menggunakan metrik.

2. Mendefinisikan Pendengar

Kita boleh mendaftarkan pendengar Sesi HTTP di web.xml :

  com.baeldung.web.SessionListenerWithMetrics  

Sebagai alternatif, dalam persekitaran Servlet 3, kita dapat menggunakan @WebListener untuk mendaftarkan pendengar juga. Dalam kes ini, kita perlu memberi penjelasan mengenai kelas SpringBootApplication utama dengan @ServletComponentScan.

Akhirnya, kita juga dapat mendaftarkan pendengar menggunakan konfigurasi Java dengan menyatakan ServletListenerRegistrationBean bean :

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

3. Pendengar Asas

Pendengar sederhana akan mengesan bilangan sesi aktif setiap masa:

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(); } }

Pendengar sesi akan dipicu ketika sesi dibuat - sessionCreated :

HttpSession session = request.getSession();

Dan musnah - sesiDihancurkan :

session.invalidate();

Mekanisme ini membolehkan jumlah sesi semasa diambil dari pendengar, tetapi untuk mendapatkan pemantauan dan ketelusan masa nyata , kami memerlukan logik tambahan untuk benar-benar mendapatkan kembali nilai dan menerbitkannya.

Di sinilah perpustakaan metrik masuk - terdapat beberapa wartawan luar kotak yang membolehkan metrik ini diterbitkan dengan usaha yang sangat sedikit.

4. Pendengar Dengan Sukatan

Oleh itu, daripada melancarkan penyelesaian pemantauan khusus kami sendiri, kami akan memanfaatkan perpustakaan metrik ; kami perlu menambahkannya ke pom kami:

 com.codahale.metrics metrics-core 3.0.1 

Dengan inti metrik 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 - pejabat pendaftar tengah semua metrik permohonan - adalah semata-mata dirujuk dalam permohonan bidang statik luas:

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

Menerbitkan metrik ini dan menjadikannya mudah untuk dipantau - misalnya ke sistem pembalakan standard aplikasi - sangat 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 menggambarkan cara mendaftarkan HttpSessionListener dalam penerangan penerapan aplikasi web dan bagaimana memantau jumlah sesi yang aktif menggunakan dua mekanisme. Mekanisme pertama adalah kaunter gulung tangan dan yang kedua berdasarkan perpustakaan metrik matang .

Pelaksanaannya boleh didapati dalam contoh projek GitHub.