问题标签 [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.
java - PoolingNHttpClientConnectionManager 的 requestConnection 如何在 Apache HttpAsyncClient 中工作?
PoolingNHttpClientConnectionManager 的 requestConnection 如何在 Apache HttpAsyncClient 中工作?有人可以给我看一个工作的例子吗?
java - HttpAsyncClient PoolingNHttpClientConnectionManager.requestConnection 未能返回?
以下是从 PoolingNHttpClientConnectionManager 请求 NHttpClientConnection 的代码。调用 connFuture.get() 无法返回。有谁知道为什么?我正在使用 HttpAsyncClient 库 httpasyncclient-4.0.1.jar
httpclient - 获取使用 HttpAsyncClient 时的连接速度
使用同步HttpClient
时,很容易得到一个请求的时间,只需放在方法System.currentTimeMillis()
的前后即可execute()
。
但是说到HttpAsyncClient
,execute()
是异步的,它只会将任务放入队列中。所以我不知道如何获得连接的开始时间。
一个连接的结束时间很简单,在类实例System.currentTimeMillis()
的方法中调用即可OnComplete()
FutureCallback<HttpResponse>
同步HttpClient
和异步HttpAsyncClient
都具有三个阶段,ConnectRequestTime
,ConnectTime
,SocketTime
。所有请求将在实际执行之前排队。如果我们调用long start=System.currentTimeMillis()
,HttpAsyncRequestProducer.html#generateRequest()
我们只记下请求发送到内部队列的开始时间,所以最后你得到的是 ConnectRequestTime
++ ConnectTime
,SocketTime
当你做一个基准测试一个批处理请求时,很好,但是测试每个请求,我们需要减去ConnectRequestTime
.
所以我真正的问题是如何获得时间ConnectRequestTime
?
java - HttpAsyncClient 直接内存泄漏?
我用的是Apache httpasyncclient 4.1,在jconsole中发现直接内存一直在增长,我试过force gc,不行。
让我感到困惑的是我不使用 DirectByteBufferAllocator。
我也grep了httpclient httpasynclient httpcore httpcore-nio的源码,只是在DirectByteBufferAllocator中有方法allocateDirect(1024)。
apache-httpclient-4.x - 如何在 Apache HttpAsyncClient 中禁用压缩处理
创建普通 CloseableHttpClient 时,我可以通过执行禁用压缩(和重定向)
这样我就可以收到未更改的 gzip 数据。现在我正在尝试使用 CloseableHttpAsyncClient,但是 HttpAsyncClients.custom() 中缺少相关方法:
我刚刚开始评估可行性或将我的代码重写为异步 API,所以我可能会遗漏一些东西。异步客户端将如何处理压缩内容?它的行为可以定制吗?
apache-httpclient-4.x - httpasyncclient OutOfMemoryError 直接缓冲内存
我使用httpasyncclient 4.1,我发现直接内存不断增长。最后抛出 java.lang.OutOfMemoryError。
我已经设置
MaxDirectMemorySize=100m
,我已经设置
-XX:-DisableExplicitGC。
poolingNhttpClientManager 的主堆栈如下,看来 select() 卡住了。
java - HttpAsyncClient 4 是如何工作的?
在以前版本的HttpClient
目标主机中设置为客户端本身。在上一个版本(因为它是 4.1.1)中,每次我发出请求时都会HttpAsyncClient
将主机设置为HttpRequest
(等)。HttpGet
HttpPost
我想使用持久连接,所以我使用HttpAsyncClient
. 我像这样创建和使用它:
正如我测试的那样,它比平时运行得更快HttpClient
(如果我完成所有请求,然后等待所有响应)。
但我不能完全理解,它是如何在内部工作的。建立了多少个连接https://google.com/
?如果我client
先用于一台主机,然后再用于另一台主机,会发生什么情况?(正如我测试的那样,响应可以按任何顺序出现,所以我想至少有 2 个并行连接)。HttpAsyncClients.createDefault()
和有什么区别HttpAsyncClients.createPipelining()
?
谢谢!
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部分中具有不同日志记录设置的代码的一些线路日志:
UPD3
我只是尝试用 createMinimal() 替换 createDefault(),它导致了与 createPipelining() 相同的错误。MinimalHttpAsyncClient 中的任何想法可能会导致此问题?也许有一种方法可以手动创建流水线客户端(使用构建器类)而不会出现这个问题?
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 并限制堆大小以确保它不正常 - 没有帮助)。使用的堆空间也在增加。short
char[]
是什么导致了这个问题?也许我应该使用HttpAsyncClient
一些不同的方式?我需要使用自定义RequestProducer
还是ResponseProducer
使用CountDownLatch
?
UPD 问题是因为PowerMock库