0

我们有一个用例,来自最终用户的单个请求将触发对其他远程系统的 1 个或多个 http 请求。来自远程系统的所有响应都将汇总为一个对最终用户的响应。我们通过在 websphere 中使用 commonj workmanager 来实现这一点。

现在,我们想使用 asyncHttpClient 以减少线程来服务多个并发 http 调用。

所以我的问题是:

如何将 asyncHttpClient 与 commonj workmanager 集成?我们必须使用 commonj 作为线程池,因为这是在 wehsphere 中拥有托管线程的唯一方法。

请指教。

4

1 回答 1

1

您需要做的就是创建一个利用工作管理器的新 ExecutorService,如下所示。更多细节...

  1. 查找 WorkManager 并构造 WASThreadFactory

    InitialContext ctx = new InitialContext(); WorkManager wm = (WorkManager)ctx.lookup("java:comp/env/wm/default"); ThreadFactory tf = new WASThreadFactory(wm);

  2. 使用有界缓冲区创建 ThreadPoolExecutor

    BlockingQueue q = 新的 ArrayBlockingQueue(50); ExecutorService myOwnThreadPool= = new ThreadPoolExecutor(1, 10, 5000, TimeUnit.MILLISECONDS, q, tf);

  3. 根据他们的文档,您可以指定要使用的 ExecutorService 如下

    Builder builder = new AsyncHttpClientConfig.Builder(); builder.setExecutorService(myOwnThreadPool); AsyncHttpClient 客户端 = new AsyncHttpClient(builder.build());

注意:没有验证编译。然而,我在我之前的项目中使用过这个。

于 2012-11-21T19:53:42.507 回答