У меня есть одна java-программа, которая обрабатывает некоторые бизнес-данные и должна возвращать ответ. Но, как часть резервного копирования этих данных, я хочу реализовать другой метод, когда он доставляет эти данные этому методу и асинхронно создает резервную копию, чтобы клиент не дождался завершения этой операции резервного копирования. Может ли кто-нибудь предложить лучший способ реализовать это? Мы нажимаем более 100 req/s, и все обработанные данные должны быть скопированы.Как реализовать асинхронную работу в java
ответ
Я думаю, вы можете использовать java.util.concurrent.ExecutorService
Проблема, с которой я столкнулся с executorService, заключается в завершении работы, так как мой основной поток, обработчик запроса, вернул ответ. И исполнитель все еще выполняет фоновое задание, как только это будет сделано, я хочу отключить это, чтобы ни один поток не был активным, так как я думаю, что это может вызвать некоторые проблемы в prod-приложении. Правильно ли я в этом сценарии? – user509755
Вы должны использовать java.util.concurrent.ExecutorService
для реализации такой функциональности. Это даст вам гораздо более тонкий контроль над размером пула потоков и другими аспектами, такими как тайм-аут и ожидание.
Spring 3.0 @Async
позволяет выполнить задачу асинхронно. Перейдите по этой ссылке, чтобы узнать больше об использовании задач Spring асинхронных:
http://java-success.blogspot.in/2013/05/asynchronous-processiong-with-spring.html
Похоже, вы должны серьезно рассмотреть вопрос об использовании какой-то технологии очередей сообщений, как JMS (Hornet) или AMQP (RabbitMQ).
@Async
хорошо подходит для небольших задач, но он не масштабируется и не имеет равных ExecutorService
. Не говоря уже о том, что ваша проблема даже больше напоминает проблему сообщения, а не простое выполнение задачи (резервное копирование и уведомление клиента). Теория MQ/практика/реализация требует некоторого чтения, поэтому я рекомендую вам посмотреть документацию Spring AMQP/JMS и общую очередь сообщений.
Что касается уведомления клиента, посмотрите на new spring mvc DeferredResul t.
- 1. Как закончить асинхронную работу
- 2. Как реализовать асинхронную очередь?
- 3. Как реализовать асинхронную связь между потоками в Java?
- 4. Как выполнить асинхронную работу в asp.net
- 5. Как запустить базовую асинхронную работу в синатра?
- 6. Как реализовать функцию как асинхронную в nodejs
- 7. Как реализовать асинхронную запись в c/C++?
- 8. Как сделать асинхронную работу частью веб-сервиса?
- 9. Как реализовать асинхронную модель наблюдателя или события
- 10. Как реализовать асинхронную/ожидающую версию метода System.IO.Directory.CreateDirectory?
- 11. Как реализовать асинхронную загрузку на странице ASP.NET?
- 12. Должен ли я реализовать асинхронную параллельную или асинхронную задачу
- 13. Aurelia Как сделать асинхронную работу в прикрепленном методе пользовательского компонента
- 14. Почему Реализовать асинхронную служба WCF Операция
- 15. Как реализовать асинхронную обработку с помощью приложения J2EE
- 16. Как реализовать асинхронную загрузку изображений с поддержкой кеша в android?
- 17. Как сделать параллельную асинхронную работу и ждать использования 100% процессора?
- 18. Попытка получить асинхронную работу в приложении Windows C++
- 19. Как написать асинхронную службу java EJB?
- 20. Как реализовать и асинхронную проверку подлинности электронной почты?
- 21. как реализовать асинхронную архитектуру коммутации с использованием ESB и MQ
- 22. Ведущий: когда начать асинхронную работу с фрагментом setRetainInstance (true)
- 23. NodeJS: Кто выполняет асинхронную работу при вызове асинхронной функции?
- 24. Как getDeclaredMethod работу в Java
- 25. Как синхронизировать работу в Java
- 26. как реализовать метод Scheduler.interrupt, чтобы остановить работу
- 27. Как реализовать многопоточный PID-контроллер в Java?
- 28. Как реализовать классы, выполняющие ту же работу?
- 29. Как разместить асинхронную внутреннюю петлю
- 30. Как отменить асинхронную задачу?
Если вы используете Spring 3, вы можете использовать аннотацию @Async для своей асинхронной операции. Для некоторых идей см. Http://stackoverflow.com/questions/17167020/when-to-use-spring-async-vs-callable-controller-async-controller-servlet-3. – lreeder
Пожалуйста, укажите более подробную информацию, например, версию программного обеспечения (java, spring и т. Д.). Это поможет точно ответить на ваш запрос. – CuriousMind