Автор оригинала: Eugen Paraschiv.
1. Обзор
В этом уроке будет показано, как зарегистрировать javax.servlet.http.HttpSessionListener и отслеживать количество активных сеансов в веб-приложении с помощью метрик .
2. Определение слушателя
Мы можем зарегистрировать прослушиватель сеанса HTTP в Мы можем зарегистрировать прослушиватель сеанса HTTP в :
com.baeldung.web.SessionListenerWithMetrics
В качестве альтернативы, в среде сервлета 3/| мы можем использовать @WebListener для регистрации прослушивателя. В этом случае нам нужно аннотировать основной класс SpringBootApplication с помощью @ServletComponentScan .
Наконец, мы также можем зарегистрировать прослушиватель с помощью конфигурации Java , объявив ServletListenerRegistrationBean bean :
@Bean public ServletListenerRegistrationBeansessionListenerWithMetrics() { ServletListenerRegistrationBean listenerRegBean = new ServletListenerRegistrationBean<>(); listenerRegBean.setListener(new SessionListenerWithMetrics()); return listenerRegBean; }
3. Основной Слушатель
Простой слушатель будет постоянно отслеживать количество активных сеансов :
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(); } }
Прослушиватель сеанса будет запущен при создании сеанса – sessionCreated :
HttpSession session = request.getSession();
И уничтожен – Сессия уничтожена :
session.invalidate();
Этот механизм позволяет извлекать текущее количество сеансов из прослушивателя, но для того , чтобы иметь мониторинг в реальном времени и прозрачность , нам нужна дополнительная логика для фактического извлечения значения и его публикации.
Именно здесь появляется библиотека метрик – она поставляется с несколькими готовыми репортерами , которые позволяют публиковать эту метрику с очень небольшими усилиями.
4. Слушатель С Метриками
Таким образом, вместо того, чтобы развертывать наше собственное решение для мониторинга, мы будем использовать библиотеку метрик ; нам нужно будет добавить ее в наш pom:
com.codahale.metrics metrics-core 3.0.1
С метрической оценкой, доступной на пути к классу, мы можем написать то же самое HttpSessionListener использование счетчика объекта:
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(); } }
MetricRegistry – центральный реестр всех метрик приложений – просто упоминается в статическом поле приложения:
public final class MetricRegistrySingleton { public static final MetricRegistry metrics = new MetricRegistry(); }
Опубликовать эту метрику и сделать ее легко доступной для мониторинга – например, в стандартной системе ведения журнала приложения – очень просто:
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. Заключение
В этом руководстве показано, как зарегистрировать HttpSessionListener в дескрипторе развертывания веб-приложения и как отслеживать активное количество сеансов с помощью двух механизмов. Первый механизм представляет собой ручной счетчик, а второй основан на библиотеке зрелых метрик .
Реализацию можно найти в примере проекта GitHub .