问题标签 [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 回答
7036 浏览

java - CloseableHttpAsyncClient 以 ConnectionClosedException 终止:连接意外关闭

我正在开发一个文件下载器,它提交大约一千个文件的获取请求。我遇到了这篇文章,它有助于使用执行器框架提交大量请求。我尝试运行较少数量的文件(大约一百个),它正在工作。但是,我运行的大量文件导致了 ConnectionClosedException。

这是提交请求的下载代码:

我收到的堆栈跟踪是:

对于一些工人。

0 投票
4 回答
31771 浏览

java - java.lang.IllegalStateException: Request cannot be executed; I/O reactor status: STOPPED

I have a service that is expected to execute requests at ~5 or more requests/min. This service depends on Apache AsyncHttpClient. After every few minutes, the clients hits some condition which causes java.lang.IllegalStateException: Request cannot be executed; I/O reactor status: STOPPED. All requests to the client start failing with same exception message. After service is restarted, this cycle repeats.

It is really hard to debug this problem as the request execution failure surprisingly does not cause a callback to the failed() method of the AsyncResponse.

From what I could gather, there has been a fix HTTPCORE-370 in HttpCore NIO which solved a similar problem in 4.3.2. I am using the following version -

commons-httpclient-3.1.jar
httpasyncclient-4.1.1.jar
httpcore-4.4.4.jar
httpcore-nio-4.4.4.jar

Yet seeing this problem.

0 投票
1 回答
10444 浏览

java - 用于吞吐量的 HTTP 客户端 - Netty 与 Apache HttpAsyncClient

我有兴趣从单台机器每秒执行大约 50 个 HTTP 请求。我不太关心延迟,但我确实关心吞吐量。

我正在尝试决定是使用 Apache HttpAsyncClient 还是使用 Netty。有人可以阐明每个关于我的问题的优势吗?

我找到了这个比较,但我希望能更详细地解释哪个更好以及什么用例。此外,比较是否意味着使用具有 200 个线程的同步 apache HTTP 客户端比其他选项更好?200个线程是不是有点太多了(假设我使用的是一台4核、每核2个线程和12GB RAM的普通计算机)?

提前致谢

0 投票
1 回答
3447 浏览

apache-httpcomponents - org.apache.http.nio.reactor.IOReactorException: I/O dispatch worker 异常终止

我有一个使用 apache HttpAsyncClient 的服务。(版本:httpasyncclient-4.0.2.jar、httpcore-4.4.3.jar、httpcore-nio-4.3.3.jar)

所有请求在启动异步客户端后一段时间开始失败,以下是初始异常 -

新版本也会出现同样的问题 - httpasyncclient-4.1.1.jar、httpcore-4.4.4.jar、httpcore-nio-4.4.4.jar

任何见解将不胜感激。是否有一些 IOReactorConfig 参数需要更改?

0 投票
0 回答
125 浏览

java - 侦听器之间的非阻塞写入

我正在使用 apache 异步客户端读取 http 响应。每次我读取一大块数据时,我都想以非阻塞模式将其写入 servletoutputstream。像这样的东西:

显然,即使我将“sos”包装在 WritableChannel 中,这也不起作用,因为我总是以 servletoutputstream 中的 bytearrayoutputstream 结束。

所以我应该在 servletoutputstream 中添加一个 WriteListener 以切换到 nio 模式,但是我无法解决的问题来了。如何将我的 http 回调中的每一块数据传递给 writelistener 以异步和非阻塞地工作?

这可能吗?如果是这样,谁能给我一个关于如何做的线索?

0 投票
1 回答
2107 浏览

java - 如何使用 Apache 的 HTTP 异步客户端异步使用 http 响应内容?

我是 Java NIO 的新手。我用它来发出 HTTP Get 请求。请求正确执行,但我无法弄清楚如何获取响应的内容。

例如,

现在我如何获取响应的内容?在打印未来时,我得到以下信息:

我的响应(在浏览器上)是 903 个字符,所以我知道它正确地发出请求。但是,如何打印出结果的 json 内容?

0 投票
1 回答
3974 浏览

java - 无法在 RequestConfig 中将 Socket Timeout 设置为小于 1000 毫秒(Apache HTTP 异步客户端 4.1.2)

以下是我的代码

根据 setSocketTimeout 的值,它应该在 100 毫秒内超时,但它需要 1000 毫秒才能超时。不过,setSocketTimeout 尊重所有大于 1000 毫秒的值。

0 投票
1 回答
181 浏览

java - Java 中的无界 PipedInputStream

我正在使用 http 库来获取大小为 200 mb 的数据。然后处理数据中的每一行。为了节省内存,我想在数据流入时逐行处理数据,而不是等待首先下载所有 200 mb。

我正在使用的 http 库公开了一个类似于 OnCharReceived(CharBuffer buffer) 的方法,该方法可以被覆盖,这样我就可以有效地处理传入的每个数据块。

我想将此数据公开为 InputStream。我的第一个想法是使用 PipedInputStream 和 PipedOutputStream 对,在 OnCharReceived() 中我将写入 PipedOutputStream 并在我的线程中从 PipedInputStream 读取。但是,这似乎存在问题,即管道的底层缓冲区可能已满,需要写入线程在 OnCharReceived 中阻塞,直到我的线程开始处理数据。但是在 OnCharReceived 中阻塞可能会阻塞在 http 库的 IO 线程中,并且会非常糟糕。

是否有 Java 类可以处理我需要在这里解决的抽象问题,而我不必推出自己的自定义实现。我知道 BlockingQueue 之类的东西可以用作更大解决方案的一部分。但是有没有简单的解决方案。

由于遗留代码的原因,我确实需要将数据公开为 InputStream。

编辑:更准确地说,我的代码基于 apache http async 库中的以下示例

https://hc.apache.org/httpcomponents-asyncclient-dev/httpasyncclient/examples/org/apache/http/examples/nio/client/AsyncClientHttpExchangeStreaming.java

0 投票
0 回答
7156 浏览

java - Apache ConnectionClosedException:连接关闭,HttpAsyncRequestExecutor.endOfInput(HttpAsyncRequestExecutor.java:344)

我们在同一个 tomcat 服务器上部署了三个应用程序 A、B 和 C。在 A 到 B(REST CALL)之间发生了一个 HTTP 调用,从 B 到 C 发生了另一个 http 调用(REST CALL)

我们最初使用同步 HTTP 调用,最近我们将代码更改为异步调用。我们已经将 HttpAsyncClients 用于(应用程序 A 调用应用程序 B)和(应用程序 B 调用应用程序 C)..

我们收到间歇性的 org.apache.http.ConnectionClosedException:有时我们在应用程序 A(Async Client to B)的日志中遇到此异常,有时在 Application B(Async Client to C)的日志中收到此异常

对于每个请求,我们都给出了超时

请在下面找到堆栈跟踪:

请注意,这个问题不是 与 httpasynclient stacj 跟踪完全不同的间歇性 ConnectionClosedException 的重复。如果这个问题是间歇性发生的。

0 投票
0 回答
109 浏览

java - 防止 Apache httpcore 遭受慢速拒绝服务攻击

我正在使用 apache httpcore 库来监听 http 请求,如下所示。

我想配置 mod_reqtimeout、mod_qos 和 mod_security,以防止“缓慢拒绝服务”。但我不确定如何配置这些参数。你能帮忙吗?