2010-08-02 3 views
4

Я создаю веб-службу, которая выполняет процесс базы данных (код SQL для запуска нескольких запросов, а затем перемещение данных между двумя действительно большими таблицами), я предполагаю, что некоторые процессы могут от 2 до 10 часов для выполнения.Шаблоны Java для долгого процесса в веб-службе

Каковы наилучшие методы для выполнения длительного процесса работы с базой данных из веб-сервиса Java (на самом деле он основан на REST, используя JAX-RS и Spring)? Процесс будет выполнен по 1 вызову веб-службы. Ожидается, что это исполнение будет сделано один раз в неделю.

Заранее благодарен!

ответ

6

Это должно быть асинхронным.

Поскольку ваш вызов веб-службы является RPC, лучше всего выполнить проверку, запросить запрос, поместить его в очередь для обработки и немедленно отправить ответ, в котором есть токен или URL-адрес, чтобы проверить ход выполнения.

Настройте очередь JMS и зарегистрируйте прослушиватель, который выводит сообщение из очереди и сохраняет его.

Если это действительно занимает 2-10 часов, я бы рекомендовал посмотреть на вашу схему и запросы, чтобы узнать, можете ли вы ускорить ее. Я бы сказал, что там где-то отсутствует индекс.

+0

спасибо! Я изучаю ActiveMQ прямо сейчас, чтобы реализовать это. Еще один вопрос: это ситуация, когда я буду использовать pub/sub (темы) или очередь? каковы плюсы и минусы каждого в этом контексте? – wsb3383

+0

@duffymo: Есть идеи, как использовать токен или URL для проверки прогресса? – Diluu

+0

Вы можете либо опросить («Done? How 'Bout now?»), Либо использовать события и обратные вызовы. – duffymo

1

Где я работаю, в настоящее время оцениваю различные стратегии для этой точной ситуации, только времена разные.

С моментами, когда вы заявляете, вам может быть лучше обслуживать с помощью очереди публикации/Подписки (ActiveMQ).

+0

спасибо, почему вы считаете, что pub/sub - предпочтительный подход к очередности? – wsb3383

+0

Проблема действительно связана с «Как сделать эту веб-службу асинхронной на сервере». Есть несколько решений для этого (Metro WS stack имеет некоторую поддержку), но из тех, что я видел, они действительно не так уж дружелюбны в своем подходе. Очередь сообщений Pub/Sub была построена для подобных ситуаций, и, как говорится, «используйте правильный инструмент для работы». К сожалению, для моего проекта работы мы решили не использовать очередность сообщений Pub/Sub. –

Смежные вопросы