我有一個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(大黃蜂)或AMQP(RabbitMQ的)。
@Async
很適合小家務,但它不會縮放,也不是一個簡單的ExecutorService
。更不用說你的問題更像是一個消息問題,而不是一個簡單的任務執行(備份和客戶端通知)。 MQ理論/實踐/實現需要一些閱讀,所以我建議你看一下Spring AMQP/JMS和一般的消息隊列文檔。
在通知客戶方面,請看new spring mvc DeferredResul t。
- 1. 如何使用muleClient.request從Java實現異步AMQP-RabbitMQ實現?
- 2. 如何在Java中實現異步方法調用?
- 3. 如何在python中實現類似Java的異步行爲?
- 4. 如何在Java中實現同步塊?
- 5. 異步在Tornado中如何工作?
- 6. 異步在Express中如何工作?
- 7. 異步Ruby如何在Vim中工作?
- 8. 如何實現vertex中的異步
- 9. 你如何在C#和MVVM中實現異步操作?
- 10. 異步測試如何在實習生中工作?
- 11. 在Java中如何同步工作
- 12. 同步如何在Java中工作?
- 13. ActiveMQ實現異步確認JAVA 8
- 14. 可可異步套接字Java實現
- 15. 異步ICommand實現
- 16. Java異步NIO servlet現在按預期工作
- 17. java如何同步工作
- 18. 如何實現異步回調?
- 19. 如何實現異步NPAPI插件
- 20. 如何實現異步緩存?
- 21. 如何正確實現異步/等待
- 22. 如何實現異步數據庫庫?
- 23. 如何實現異步響應?
- 24. 如何實現異步方法
- 25. 如何實現異步計算?
- 26. 如何實現異步處理
- 27. 在Java中的異步任務中實現繁忙等待
- 28. 在RIA DomainContext如何讓實體方法異步工作
- 29. WCF Restful Service - 實現異步操作
- 30. 如何實現一個真正的異步Java線程
如果您使用Spring 3,則可以在異步操作上使用@Async註釋。有關一些想法,請參閱http://stackoverflow.com/questions/17167020/when-to-use-spring-async-vs-callable-controller-async-controller-servlet-3。 – lreeder
請提供更多的細節,如軟件版本(Java,春季等)。這將有助於準確回答您的查詢。 – CuriousMind