我有一个REST API,后端必须调用异步任务。此任务将邮件发送到第三方URL。我想将此任务保留在线程池中,并且需要300个任务/秒的性能。我使用了一个HttpClient池,每个路由有50个连接,每个使用HttpClient的线程可以在一秒内完成5个任务。所以我保持> 60个线程来实现我的目标。这种方法是否正确?
答案 0 :(得分:0)
如果您有更多任务要执行异步操作,例如日志记录,数据库条目等,那么创建一个类来完成它们,使用线程池执行程序并测试它。保持初始和最大线程数可配置,因为开发,测试和实时环境的结果会有所不同。还可以使用http客户端功能以最佳方式执行网络部分。
与PoolingHttpClientConnectionManager http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/impl/conn/PoolingHttpClientConnectionManager.html
类似所以你真的需要使用一个线程池,然后在其中加入网络部分。稍后,如果你做数据库操作也可以单独选择那些。
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)