Как обрабатывать длительные операции веб-службы? - PullRequest
11 голосов
/ 31 июля 2010

Мне нужно создать приложение Java EE, которое конвертирует большие документы в различные форматы.Каждое преобразование занимает от 10 секунд до 2 минут.Запросы SOAP будут поступать из клиентского приложения, которое я также должен создать.

Как лучше всего обрабатывать эти длительные запросы?Очевидно, что процесс занимает много времени без какой-либо обратной связи с пользователем.

Я могу придумать следующие способы предоставления какой-либо обратной связи, но я не уверен, что нет лучшего способаВозможно, что-то стандартизировано.

  1. Клиент выполняет запрос из потока, а сервер отправляет документ в ответ, что может занять несколько минут.До этого клиент отображает сообщение «Пожалуйста, подождите», индикатор выполнения и т. Д. ( Это кажется простым для реализации. )
  2. Клиент отправляет команду «Начать преобразование».Сервер возвращает какой-то идентификатор задания , который клиент может использовать, чтобы часто запрашивать обновление статуса или окончательный документ.( Это кажется удобным для пользователя, потому что я могу отображать прогресс, но также требует, чтобы сервер был с состоянием. )
  3. Клиент отправляет команду «Начать преобразование».Сервер как-то уведомляет клиента, когда это сделано.( Здесь я даже не знаю, как это сделать )

Есть ли другие подходы?Какой из них является лучшим с точки зрения производительности, стабильности, отказоустойчивости, удобства использования и т. Д.?

Спасибо за ваши ответы.

Ответы [ 2 ]

5 голосов
/ 02 августа 2010

Поскольку это почти все сделано на стороне сервера, клиент не может ничего сделать, кроме как опросить сервер на предмет обновлений статуса.

# 1 в порядке, но пользователи очень быстро теряют терпение. «Несколько минут» - это слишком много для большинства людей. Для реализации # 3 вам потребуется HTTP Streaming , но я думаю, что это излишне.

Я бы просто пошел с # 2.

1 голос
/ 02 августа 2010

Для 3 сервер должен вернуть уникальный идентификатор обратно клиенту, и, используя этот идентификатор, клиент должен запросить у сервера результат позже

...