使用客户端请求
我有一个在Jetty上运行的REST Web服务。 我想编写一个Java客户端,该客户端使用相同的Web连接将大量文档分块到剩下的服务中。
我能够在这里建立一个基于迭代器的流式方法:
将文档流发送到Jersey @POST端点
除非您设置clientConfig.property(ClientProperties.REQUEST_ENTITY_PROCESSING, RequestEntityProcessing.CHUNKED);
否则这不起作用clientConfig.property(ClientProperties.REQUEST_ENTITY_PROCESSING, RequestEntityProcessing.CHUNKED);
因为Content-length
是未知的。
虽然有些工作,但分块转移似乎失去了一些文件。 例如:
num_docs 500000
numFound 499249
也许它正在发送大块:
{some:doc}, {some:doc}, {some:doc}, {some:doc}, {some:doc}, {some:doc}, {some:do
所以我每次都在输球吗? 更新:我错了。
我如何让它不这样做? 任何想法还有什么可能发生?
ClientConfig clientConfig = new ClientConfig();
clientConfig.property(ClientProperties.CONNECT_TIMEOUT, (int)TimeUnit.SECONDS.toMillis(60));
clientConfig.property(ClientProperties.REQUEST_ENTITY_PROCESSING, RequestEntityProcessing.CHUNKED);
clientConfig.property(ClientProperties.ASYNC_THREADPOOL_SIZE, 100);
clientConfig.property(ApacheClientProperties.CONNECTION_MANAGER, HttpClientFactory.createConnectionManager(name,
metricRegistry, configuration));
ApacheConnectorProvider connector = new ApacheConnectorProvider();
clientConfig.connectorProvider(connector);
clientConfig.register(new ClientRequestFilter() {
@Override
public void filter(ClientRequestContext requestContext) throws IOException {
List<Object> orig = requestContext.getHeaders().remove(HttpHeaders.CONTENT_LENGTH);
if (orig != null && !orig.isEmpty()) {
requestContext.getHeaders().addAll("Length", orig);
}
}
});
clientConfig.register(new ClientRequestFilter() {
@Override
public void filter(ClientRequestContext requestContext) throws IOException {
if (requestContext.getMediaType() != null &&
requestContext.getMediaType().getType() != null &&
requestContext.getMediaType().getType().equalsIgnoreCase("multipart")) {
final MediaType boundaryMediaType = Boundary.addBoundary(requestContext.getMediaType());
if (boundaryMediaType != requestContext.getMediaType()) {
requestContext.getHeaders().putSingle(HttpHeaders.CONTENT_TYPE, boundaryMediaType.toString());
}
if (!requestContext.getHeaders().containsKey("MIME-Version")) {
requestContext.getHeaders().putSingle("MIME-Version", "1.0");
}
}
}
});
关闭这个 - 我不小心关闭了流,所以它真的在最后丢失了文档,这让我暗示在关闭执行程序之前等待阻塞队列为空。
链接地址: http://www.djcxy.com/p/36487.html上一篇: With Client REQUEST