问题标签 [apache-httpasyncclient]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1315 浏览

java - PoolingNHttpClientConnectionManager 的 requestConnection 如何在 Apache HttpAsyncClient 中工作?

PoolingNHttpClientConnectionManager 的 requestConnection 如何在 Apache HttpAsyncClient 中工作?有人可以给我看一个工作的例子吗?

0 投票
1 回答
1459 浏览

java - HttpAsyncClient PoolingNHttpClientConnectionManager.requestConnection 未能返回?

以下是从 PoolingNHttpClientConnectionManager 请求 NHttpClientConnection 的代码。调用 connFuture.get() 无法返回。有谁知道为什么?我正在使用 HttpAsyncClient 库 httpasyncclient-4.0.1.jar

0 投票
1 回答
295 浏览

httpclient - 获取使用 HttpAsyncClient 时的连接速度

使用同步HttpClient时,很容易得到一个请求的时间,只需放在方法System.currentTimeMillis()的前后即可execute()

但是说到HttpAsyncClientexecute()是异步的,它只会将任务放入队列中。所以我不知道如何获得连接的开始时间。

一个连接的结束时间很简单,在类实例System.currentTimeMillis()的方法中调用即可OnComplete()FutureCallback<HttpResponse>

同步HttpClient和异步HttpAsyncClient都具有三个阶段,ConnectRequestTimeConnectTimeSocketTime。所有请求将在实际执行之前排队。如果我们调用long start=System.currentTimeMillis()HttpAsyncRequestProducer.html#generateRequest()我们只记下请求发送到内部队列的开始时间,所以最后你得到的是 ConnectRequestTime++ ConnectTimeSocketTime当你做一个基准测试一个批处理请求时,很好,但是测试每个请求,我们需要减去ConnectRequestTime.

所以我真正的问题是如何获得时间ConnectRequestTime

0 投票
0 回答
357 浏览

java - HttpAsyncClient 直接内存泄漏?

我用的是Apache httpasyncclient 4.1,在jconsole中发现直接内存一直在增长,我试过force gc,不行。

让我感到困惑的是我不使用 DirectByteBufferAllocator。

我也grep了httpclient httpasynclient httpcore httpcore-nio的源码,只是在DirectByteBufferAllocator中有方法allocateDirect(1024)。

0 投票
1 回答
884 浏览

apache-httpclient-4.x - 如何在 Apache HttpAsyncClient 中禁用压缩处理

创建普通 CloseableHttpClient 时,我可以通过执行禁用压缩(和重定向)

这样我就可以收到未更改的 gzip 数据。现在我正在尝试使用 CloseableHttpAsyncClient,但是 HttpAsyncClients.custom() 中缺少相关方法:

我刚刚开始评估可行性或将我的代码重写为异步 API,所以我可能会遗漏一些东西。异步客户端将如何处理压缩内容?它的行为可以定制吗?

0 投票
1 回答
1306 浏览

apache-httpclient-4.x - 如果 setConnectionManagerShared 设置为 true,则 HttpAsyncClient 不会发出请求

出于某种原因HttpAsyncClient,如果setConnectionManagerShared设置为true. 我发现了这个错误,但无法弄清楚我错过了什么。

这是我创建新客户的方法

全班设在这里

我应该改变什么?

0 投票
1 回答
1602 浏览

apache-httpclient-4.x - httpasyncclient OutOfMemoryError 直接缓冲内存

我使用httpasyncclient 4.1,我发现直接内存不断增长。最后抛出 java.lang.OutOfMemoryError。

我已经设置

MaxDirectMemorySize=100m

,我已经设置

-XX:-DisableExplicitGC。

poolingNhttpClientManager 的主堆栈如下,看来 select() 卡住了。

0 投票
1 回答
4923 浏览

java - HttpAsyncClient 4 是如何工作的?

在以前版本的HttpClient目标主机中设置为客户端本身。在上一个版本(因为它是 4.1.1)中,每次我发出请求时都会HttpAsyncClient将主机设置为HttpRequest(等)。HttpGetHttpPost

我想使用持久连接,所以我使用HttpAsyncClient. 我像这样创建和使用它:

正如我测试的那样,它比平时运行得更快HttpClient(如果我完成所有请求,然后等待所有响应)。

但我不能完全理解,它是如何在内部工作的。建立了多少个连接https://google.com/?如果我client先用于一台主机,然后再用于另一台主机,会发生什么情况?(正如我测试的那样,响应可以按任何顺序出现,所以我想至少有 2 个并行连接)。HttpAsyncClients.createDefault()和有什么区别HttpAsyncClients.createPipelining()

谢谢!

0 投票
2 回答
1113 浏览

java - ElasticSearch 和 Apache HttpAsyncClient

我正在尝试将 ElasticSearch REST API 与 JavaApache HttpAsyncClient库一起使用。我想使用持久流水线连接。这是一些测试代码(输出在注释中):

我不明白,为什么它适用于HttpAsyncClients.createDefault()客户端,但不适用于HttpAsyncClients.createPipelining(). 我也无法理解这两种创建方法之间的区别。

为什么我在使用时会收到错误响应createPipelining()

我试图查看与https://httpbin.org/post的区别,但它向我展示了两个选项的相同结果。我使用默认的 ElasticSearch 设置。

谢谢!


UPD1

我尝试使用具有相同结果的PUT文档( )请求-它可以正常工作,但是在使用时我遇到了类似的错误-未找到处理程序<...>。PUT http://127.0.0.1/test_index/test_type/<doc id>createDefault()createPipelining()

但是当我尝试执行创建索引(PUT http://127.0.0.1/<index name>)的请求时,又出现了另一个错误。请看下面的代码:

正如我在此文档页面中看到的那样, ElasticSearch 默认支持 HTTP 管道。也许我需要在 ES 设置中更改什么?


UPD2

以下是UPD1部分中具有不同日志记录设置的代码的一些线路日志:

http://pastebin.com/v29uvgbj

http://pastebin.com/G9ij15d6


UPD3

我只是尝试用 createMinimal() 替换 createDefault(),它导致了与 createPipelining() 相同的错误。MinimalHttpAsyncClient 中的任何想法可能会导致此问题?也许有一种方法可以手动创建流水线客户端(使用构建器类)而不会出现这个问题?

0 投票
2 回答
1806 浏览

java - Apache HttpAsyncClient 内存泄漏

我需要在高负载下使用 HttpAsyncClient。我这样创建 HttpAsyncClient :

然后我像这样使用它:

通常我并不真正关心响应,所以我不初始化Future<HttpResponse>变量,也不做Future.get(). 好吧,只是为了澄清(我认为这与问题无关),我有时会关心回复,但 99% 的回复对我来说并不有趣。

问题是当我做很多请求时(例如每秒 300 个,这里的“请求”一词是指client.execute()调用)我终于得到了java.lang.OutOfMemoryError: GC overhead limit exceeded. 我尝试使用 VisualVM 来了解发生了什么。我看到 , , , , ,java.lang.Object[]实例char[]java.lang.String正在byte[]增长(我试图强制 GC 并限制堆大小以确保它不正常 - 没有帮助)。使用的堆空间也在增加。shortchar[]

是什么导致了这个问题?也许我应该使用HttpAsyncClient一些不同的方式?我需要使用自定义RequestProducer还是ResponseProducer使用CountDownLatch

UPD 问题是因为PowerMock库