Рубрики
Без рубрики

Пример HttpSessionListener – Мониторинг

Настройте HttpSessionListener для отслеживания количества активных сеансов в веб-приложении с помощью метрик.

Автор оригинала: Eugen Paraschiv.

1. Обзор

В этом уроке будет показано, как зарегистрировать javax.servlet.http.HttpSessionListener и отслеживать количество активных сеансов в веб-приложении с помощью метрик .

2. Определение слушателя

Мы можем зарегистрировать прослушиватель сеанса HTTP в Мы можем зарегистрировать прослушиватель сеанса HTTP в :


    
        com.baeldung.web.SessionListenerWithMetrics
    

В качестве альтернативы, в среде сервлета 3/| мы можем использовать @WebListener для регистрации прослушивателя. В этом случае нам нужно аннотировать основной класс SpringBootApplication с помощью @ServletComponentScan .

Наконец, мы также можем зарегистрировать прослушиватель с помощью конфигурации Java , объявив ServletListenerRegistrationBean bean :

@Bean
public ServletListenerRegistrationBean sessionListenerWithMetrics() {
   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 .