2014-03-07 77 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)