2013-09-28 2 views
0

У меня есть одна java-программа, которая обрабатывает некоторые бизнес-данные и должна возвращать ответ. Но, как часть резервного копирования этих данных, я хочу реализовать другой метод, когда он доставляет эти данные этому методу и асинхронно создает резервную копию, чтобы клиент не дождался завершения этой операции резервного копирования. Может ли кто-нибудь предложить лучший способ реализовать это? Мы нажимаем более 100 req/s, и все обработанные данные должны быть скопированы.Как реализовать асинхронную работу в java

+0

Если вы используете Spring 3, вы можете использовать аннотацию @Async для своей асинхронной операции. Для некоторых идей см. Http://stackoverflow.com/questions/17167020/when-to-use-spring-async-vs-callable-controller-async-controller-servlet-3. – lreeder

+0

Пожалуйста, укажите более подробную информацию, например, версию программного обеспечения (java, spring и т. Д.). Это поможет точно ответить на ваш запрос. – CuriousMind

ответ

1

Я думаю, вы можете использовать java.util.concurrent.ExecutorService

+0

Проблема, с которой я столкнулся с executorService, заключается в завершении работы, так как мой основной поток, обработчик запроса, вернул ответ. И исполнитель все еще выполняет фоновое задание, как только это будет сделано, я хочу отключить это, чтобы ни один поток не был активным, так как я думаю, что это может вызвать некоторые проблемы в prod-приложении. Правильно ли я в этом сценарии? – user509755

0

Вы должны использовать java.util.concurrent.ExecutorService для реализации такой функциональности. Это даст вам гораздо более тонкий контроль над размером пула потоков и другими аспектами, такими как тайм-аут и ожидание.

0

Похоже, вы должны серьезно рассмотреть вопрос об использовании какой-то технологии очередей сообщений, как JMS (Hornet) или AMQP (RabbitMQ).

@Async хорошо подходит для небольших задач, но он не масштабируется и не имеет равных ExecutorService. Не говоря уже о том, что ваша проблема даже больше напоминает проблему сообщения, а не простое выполнение задачи (резервное копирование и уведомление клиента). Теория MQ/практика/реализация требует некоторого чтения, поэтому я рекомендую вам посмотреть документацию Spring AMQP/JMS и общую очередь сообщений.

Что касается уведомления клиента, посмотрите на new spring mvc DeferredResul t.

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