Мы предоставляем Helidon MP Rest-Services за балансировщиком нагрузки Apache httpd. Следующая комбинация приводит к зависанию очереди исполнителя JerseySupport Service.
Клиент отправляет POST-запрос в нашу службу rest с полезной нагрузкой json и заголовком Expect 100-continue . Балансировщик нагрузки Apache отправляет запрос на бэкэнд. Бэкэнд принимает запрос и запускает исполняемый объект JerseySupport, который ожидает поступления входящих данных, затем бэкэнд отправляет ответ LB для запуска потока (Статус ответа 100). Если в этот момент запрос клиента превышает тайм-аут соединения балансировщика нагрузки, балансировщик нагрузки прерывает соединение с вызывающим клиентом с ошибкой прокси, но серверная служба не получает информацию и ждет вечно.
Проблема в том, что io.helidon.webserver.ForwardingHandler завершает работу с публикатором содержимого http, только если отправлено сообщение LastHttpContent, а этого никогда не происходит. Если издатель не завершает работу, подписчик внутри ожидающего экземпляра службы JerseySupport навсегда блокирует экземпляр исполнителя сервера. Если это произойдет несколько раз, вся остальная услуга будет заблокирована.
Я не нашел возможности настроить соответствующий тайм-аут внутри helidon для прерывания службы JerseySupport, а также возможности заставить балансировщик нагрузки apache правильно завершить соединение с серверной частью.
Кто-нибудь из вас заметил подобные проблемы или нашел обходной путь, кроме отключения 100-continue streaming.
Версия Helidon: 1.4.4 Apache Версия: 2.4.41
Заранее спасибо