Как реализовать асинхронную обработку с помощью приложения J2EE

У меня есть корпоративное приложение, в котором ежедневно работает около 2 тысяч одновременных пользователей. Эти пользователи обрабатывают звонки клиентов, поэтому скорость приложений имеет жизненно важное значение.

Когда пользователь завершает разговор, он фиксирует всю полученную информацию. Эта фиксация может занять от 10 до 45 секунд.

Я ищу способы убрать задержку от пользователя.

У нас есть веб-интерфейс, работающий в I.E. серверная часть представляет собой тяжелую Java, работающую на одном EJB.

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

Первоначально я думал просто создать еще один поток для обработки фиксации, но с EJB это не так.

Другие варианты, которые я могу придумать, это использование JMS или SIB,

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


person Keibosh    schedule 05.01.2010    source источник
comment
Я бы, наверное, пошел JMS. Он дает вам асинхронное требование, он удобен для JEE, он позволяет масштабировать и может обеспечить хорошую надежность. Использование SIB больше связано с наличием более функционального протокола, чем RMI.   -  person Jamie McCrindle    schedule 05.01.2010


Ответы (2)


На самом деле есть две альтернативы для таких случаев.

  • Первый будет использовать JMS. Его преимущество заключается в том, что сервер предоставляет всю необходимую инфраструктуру, и вам не нужно много реализовывать самостоятельно.
  • Другим способом будет регистрация запроса в базе данных и запланированное событие для их обработки.

То, что вы выберете, зависит от ваших требований. Если вам нужно обслуживать запросы сразу после их поступления, вам нужно использовать JMS. В обоих случаях вам необходимо сохранить результат запроса в базе данных и разработать веб-службу поверх нее. Внешний интерфейс может использовать это (посредством опроса), чтобы представить результат пользователю.

person kgiannakakis    schedule 05.01.2010

Хотел бы оставить комментарий, но нет возможности.

Другая возможность:

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

person Kylar    schedule 05.01.2010