Определите, доступны ли ресурсы HTTP на веб-сервере

Я использую Glassfish v3 для обслуживания больших файлов (glassfish также используется для бизнес-логики - FYI). Я знаю, что Glassfish работает с веб-сервером Grizzily. Я использую Grizzily в синхронном режиме. Это означает, что если есть 100 потоков, разрешено только 100 загрузок. Остальные запросы будут поставлены в очередь. Однако я хочу установить 503 для HTTP-клиентов, которые не могут обслуживаться из-за отсутствия рабочих потоков (максимум 100).

Вопрос

  1. Должны ли запросы даже быть разрешены для постановки в очередь, когда нет доступных рабочих потоков
  2. Как узнать, когда рабочие потоки исчерпаны? Ручной счетчик?
  3. где в коде (фильтр, сервлет?) я должен установить код ошибки вместе с данными заголовка повторной попытки?

person TheMonkWhoSoldHisCode    schedule 20.07.2015    source источник


Ответы (2)


Обычно это особенности контейнера. Вы можете настроить размер очереди запросов с помощью свойства server.http-service.connection-pool.max-pending-count = 100. Все запросы свыше 100 будут отклонены.

Для получения дополнительной информации см. здесь:

Glassfish настраивает запросы на поддержку активности

person Ramesh PVK    schedule 20.07.2015
comment
Спасибо, я искал похожие строки. Кроме того, при отклонении мое требование состоит в том, чтобы отправить HTTP 503 вместе с настройкой заголовка HTTP Retry-After. Вы считаете, что делаете это в фильтре сервлета? - person TheMonkWhoSoldHisCode; 23.07.2015

Спецификация Servlet 3.0 представила поддержку асинхронной обработки запросов, которую вы можете использовать. Вы можете ввести пул потоков на основе приложений и обрабатывать там длительные задачи, таким образом, вы будете иметь полный контроль над размером пула потоков и предпринимать соответствующие действия, как только пул потоков достигнет некоторого предела.

person alexey    schedule 20.07.2015
comment
Асинхронная обработка происходит за счет памяти, не так ли? Кстати, я нахожу ваше решение пула потоков на основе приложений интересным. Подходит ли решение и для обработки синхронизации. Можете ли вы объяснить больше об этом, пожалуйста? - person TheMonkWhoSoldHisCode; 21.07.2015