2015-07-20 4 views
0

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

Вопрос

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

ответ

1

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

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

Glassfish tuning keepalive requests

+0

Thnx, я искал похожие строки. Кроме того, при отказе мое требование заключается в отправке HTTP 503 вместе с настройкой заголовка HTTP «Retry-After». Вы считаете, что это делаете в сервлет-фильтре? –

0

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

+0

обработка Асинхронный происходит за счет памяти, не правда ли. Кстати, я нахожу ваше решение пула потоков на основе приложений интересным. Является ли решение применимым и для обработки синхронизации. Можете ли вы объяснить больше об этом, пожалуйста? –