2010-11-30 6 views
1

Я столкнулся с ситуацией, похожей на нить за here. Разница в том, что мы не используем веб-сервис. Но мы используем веб-приложение. У нас есть требование, которое позволяет пользователю загружать 8000 записей с по меньшей мере 30 столбцами, которые записываются в файл excel через jxl.Какие шаблоны Java/Design могут использоваться для длительных синхронных процессов?

Это длительный процесс, который выполняется не асинхронно по причинам, которые я не знаю. Он также имеет огромный объем памяти ~ 500 - 800 МБ. В довершение всего, требуется 2 минуты и 10 секунд для завершения.

В настоящее время мы делегируем это требование из процесса с сервера приложений через jms. Сервер приложений отправляет запрос брокеру, а затем потребитель получает запрос из очереди, обрабатывает его и отправляет обратно URL-адрес файла excel.

У меня есть некоторые сомнения в этом, потому что я читал о JMS, и большинство предложенных нами приложений предполагают асинхронные запросы, так что пользователям не придется долго ждать, например, отправлять электронную почту, отправив запрос на утверждение, выставление счетов. В этом thread есть много примеров, и предлагаемые варианты использования могут выполняться асинхронно. Таким образом, наше текущее решение похоже на хак, а не на истинное решение.

Любые предложения, шаблоны, которые можно сделать для дальнейшего улучшения этого процесса?

EDIT: Я, к сожалению, не могу покончить с «синхронностью», если вы можете назвать это функцией, потому что это деловое требование. Поэтому я ищу ответы/трюки/трюки/шаблоны, которые могут повысить производительность и уменьшить использование памяти кучи процесса.

+1

Думаю, вам стоит попытаться сохранить часть JMS но сделать весь процесс асинхронным. –

ответ

4

Я понял это правильно?

  • Пользователь делает запрос. Во время этого запроса
    • сообщение JMS отправляется
    • файл Excel создан
    • сообщение JMS возвращаемые
    • и затем URL-адрес отправляется пользователю?

Если да, я согласен, что это ужасное злоупотребление asynchroneous природы JMS.

Что бы я сделал это:

Сразу показать пользователю результат страницы с текстом, как Ваш запрос обрабатывается, а затем

  • либо использовать AJAX для опроса сервера для результата URL (возможно, показывая пользователю в строке состояния)
  • или отправить URL клиенту по электронной почте
+0

+1, OP действительно не хочет, чтобы это было синхронно. Более двух минут слишком много для того, чтобы поток веб-сервера был активным по одному запросу. – Qwerky

+0

Да, вы поняли это правильно, но мне было интересно, можете ли вы предложить альтернативы для этого асинхронно ... – Jeune

+0

Если процесс занимает 2 минуты, все остальное было бы ужасно. Все, что занимает более 30 секунд, должно быть асинхронным, и даже это очень много. –

1

Я Я не собираюсь предлагать, что вы можете сделать с вашим JMS-сервером - его, вероятно, не очень хорошо, а может быть, я не уверен.

Мы реализовали что-то подобное, и вот что мы закончили с (наш бэкенд implmentation был совершенно другой, для другого случая использования, но «асинхронной пользователь ехр» соответствует):

  1. Позволяет пользователю представить запрос.
  2. После получения (1) задания отправьте задание на бэкэнд (JMS и т. Д.) И привяжите его к идентификатору задания
  3. Ответ (1) - это (постоянный или временный) дескриптор - идентификатор задания, например
  4. реализация бэкенд должна закончиться, установив статус задания
  5. Разрешить пользователям для опроса состояния задания (с помощью ручки, вы дали им)
  6. Если состояние задания " в процессе ", сообщите им об этом (вероятно, время для завершения - чтобы они не излишне тратили время на опрос &, обременяющее вас)
  7. Если статус «выполнен успешно», сообщите об этом пользователю, с другими данными (url и т. Д.), Пользователю необходимо будет получить доступ к результату
+0

опрос не должен быть webserivce per se - как предложено в других ответах, это может быть конечная точка, вы будете опросить, через AJAX, чтобы найти статус задания – madhurtanwani

+0

на самом деле очень хорошая реализация этого в Delicious страница «импорт файлов закладок»: https://secure.delicious.com/settings/bookmarks/import – madhurtanwani

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