我们有一个用例,来自最终用户的单个请求将触发对其他远程系统的1个或多个http请求。来自远程系统的所有响应将聚合到最终用户的单个响应中。我们通过在websphere中使用commonj workmanager来实现这一点。
现在,我们希望使用asyncHttpClient,以便为较多的并发http调用提供较少的线程。
所以我的问题是:
如何将asyncHttpClient与commonj workmanager集成?我们必须使用commonj作为线程池,因为它是在wehsphere中拥有托管线程的唯一方法。
请告知。
答案 0 :(得分:1)
您需要做的就是创建一个利用工作管理器的新ExecutorService,如下所示。 More details...
查找WorkManager并构建WASThreadFactory
InitialContext ctx = new InitialContext(); WorkManager wm =(WorkManager)ctx.lookup(“java:comp / env / wm / default”); ThreadFactory tf = new WASThreadFactory(wm);
使用有界缓冲区创建ThreadPoolExecutor
BlockingQueue q = new ArrayBlockingQueue(50); ExecutorService myOwnThreadPool = = new ThreadPoolExecutor( 1,10,5000,TimeUnit.MILLISECONDS,q,tf);
根据他们的documentation,您可以指定要使用的ExecutorService
Builder builder = new AsyncHttpClientConfig.Builder(); builder.setExecutorService(myOwnThreadPool); AsyncHttpClient client = new AsyncHttpClient(builder.build());
注意:未验证编译。不过我在之前的项目中使用了这个。