2013-09-28 60 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,春季等)。這將有助於準確回答您的查詢。 – CuriousMind

回答

1

我想你可以使用java.util.concurrent.ExecutorService

+0

問題我已經與executorService關閉,因爲我的主線程已處理請求已返回響應。執行者仍然在做後臺工作,一旦完成,我想關閉它,以便沒有線程處於活動狀態,因爲我認爲這可能會導致prod應用程序出現問題。我在這種情況下是否正確? – user509755

0

你應該利用java.util.concurrent.ExecutorService實現這樣的功能。它可以更好地控制線程池大小以及其他方面,如超時和等待。

0

這聽起來像你需要認真考慮使用一些消息隊列技術,如JMS(大黃蜂)或AMQP(RabbitMQ的)。

@Async很適合小家務,但它不會縮放,也不是一個簡單的ExecutorService。更不用說你的問題更像是一個消息問題,而不是一個簡單的任務執行(備份和客戶端通知)。 MQ理論/實踐/實現需要一些閱讀,所以我建議你看一下Spring AMQP/JMS和一般的消息隊列文檔。

在通知客戶方面,請看new spring mvc DeferredResul t。