javax.ws.rs.client.WebTarget POST 并同时获得响应
javax.ws.rs.client.WebTarget POST and get Response in the same time
我休息一下 API,它提供了一个 POST 方法来转换输入数据并将其流式传输为输出(输入也被流式传输,因此我们可以传输大量数据)。
使用 curl,我能够在处理响应的同时处理 post 这样的数据:
curl -uadmin -X POST "http://XXXX:8080/process" -H "Content-Type: application/octet-stream" --data-binary @myFile.csv > output.csv
Enter host password for user 'admin':
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 5868M 0 14826 0 106k 3627 26777 63:50:21 0:00:04 63:50:17 31293
如您所见,curl 能够在发送数据的同时接收。
我的问题是,我想使用 java(执行 Apache Spark 作业)实现相同的目的,但无法使其正常工作。当我使用程序时被阻塞,无法获取响应对象:
Response response = (javax.ws.rs.client.WebTarget)target.request().post(Entity.entity(is, MediaType.APPLICATION_OCTET_STREAM))
有人可以帮我解决吗? (下面,java 使用 jersey-client 2.22.2)
终于找到好库了:async-http-client
。只需使用 org.asynchttpclient.handler.TransferCompletionHandler
功能。
我休息一下 API,它提供了一个 POST 方法来转换输入数据并将其流式传输为输出(输入也被流式传输,因此我们可以传输大量数据)。
使用 curl,我能够在处理响应的同时处理 post 这样的数据:
curl -uadmin -X POST "http://XXXX:8080/process" -H "Content-Type: application/octet-stream" --data-binary @myFile.csv > output.csv
Enter host password for user 'admin':
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 5868M 0 14826 0 106k 3627 26777 63:50:21 0:00:04 63:50:17 31293
如您所见,curl 能够在发送数据的同时接收。
我的问题是,我想使用 java(执行 Apache Spark 作业)实现相同的目的,但无法使其正常工作。当我使用程序时被阻塞,无法获取响应对象:
Response response = (javax.ws.rs.client.WebTarget)target.request().post(Entity.entity(is, MediaType.APPLICATION_OCTET_STREAM))
有人可以帮我解决吗? (下面,java 使用 jersey-client 2.22.2)
终于找到好库了:async-http-client
。只需使用 org.asynchttpclient.handler.TransferCompletionHandler
功能。