Как обрабатывать длительные операции веб-сервиса?
Мне нужно создать приложение Java EE, которое конвертирует большие документы в разные форматы. Каждое преобразование занимает от 10 секунд до 2 минут.
Запросы SOAP будут сделаны из клиентского приложения, которое я также должен создать.
Какой лучший способ справиться с этими длинными запросами? Очевидно, что процесс занимает много времени, чтобы работать без обратной связи с пользователем.
Я могу думать о следующих способах предоставления какой-либо обратной связи, но я не уверен, нет ли лучшего способа, возможно, что-то стандартизованного.
- Клиент выполняет запрос из потока, и сервер отправляет документ в ответ, что может занять несколько минут. До тех пор клиент показывает сообщение "Подождите", прокрутите счетчик и т.д. (Это кажется простым в реализации.)
- Клиент отправляет команду "Начать преобразование". Сервер возвращает какой-то идентификатор задания, который клиент может использовать для частого опроса для обновления статуса или окончательного документа. (Это кажется удобным для пользователя, потому что я могу показать прогресс, но также требует, чтобы сервер был работоспособным.)
- Клиент отправляет команду "Начать преобразование". Сервер как-то уведомляет клиента о его завершении. (Здесь я даже не знаю, как это сделать)
Существуют ли другие подходы? Какой из них является лучшим с точки зрения производительности, стабильности, отказоустойчивости, удобства пользователя и т.д.?
Спасибо за ваши ответы.
Ответы
Ответ 1
Так как это почти все сделано на стороне сервера, клиент не так много делает, кроме как опросить сервер как-то для обновлений статуса.
# 1 в порядке, но пользователи очень нетерпеливы. "Несколько минут" слишком длинное для большинства людей. Вам понадобится HTTP Streaming для реализации # 3, но я думаю, что это перебор.
Я бы просто пошел с № 2.
Ответ 2
Для 3 сервер должен вернуть уникальный идентификатор клиенту и использовать этот идентификатор, который клиент должен запросить у сервера результат позже.