2014-03-07 130 views
2

我有一個REST API,它在後端必須調用異步任務。此任務將向第三方網址發佈消息。我想把這個任務保存到一個線程池中,並且需要300個任務/秒的性能。我使用了一個每個路由有50個連接的HttpClient池,每個使用HttpClient的線程可以在一秒內完成5個任務。所以我保持> 60線程來實現我的目標。這種方法是否正確?Web應用程序中異步任務的線程池配置

+1

我認爲下面可能是有用的http://stackoverflow.com /問題/ 4851535/HTTP的連接池,使用-的HttpClient – user2793390

回答

0

如果你有更多的任務做異步記錄,數據庫條目等,然後讓一個類來完成它們,使用線程池執行器並測試它。保持初始線程和最大線程的數量是可配置的,因爲開發,測試和現場環境中的結果會有所不同。還可以使用http客戶端功能優化網絡部分。

像PoolingHttpClientConnectionManager http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/impl/conn/PoolingHttpClientConnectionManager.html

所以真的是你需要使用一個線程池和optomize內的網絡部分。後來如果你的數據庫動作也可以分別選擇這些動作。

TheadPoolExecutor的javadoc有一些指針http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/ThreadPoolExecutor.html

這consrtructor似乎給大多數選項調整和處理情況下,如果隊列溢出

ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler)