java – 将客户端REQUEST_ENTITY_PROCESSING设置为CHUNKED,我丢失了文档
发布时间:2020-05-24 10:43:57 所属栏目:Java 来源:互联网
导读:我有一个在Jetty上运行的REST Web服务.我想编写一个 Java客户端,它使用相同的Web连接将大量文档分块到该休息服务. 我能够在这里建立一个基于Iterator的流媒体方法: Sending a stream of documents to a Jersey @POST endpoint 除非您设置clientConfig.proper
|
我有一个在Jetty上运行的REST Web服务.我想编写一个 Java客户端,它使用相同的Web连接将大量文档分块到该休息服务. 我能够在这里建立一个基于Iterator的流媒体方法: Sending a stream of documents to a Jersey @POST endpoint 除非您设置clientConfig.property(ClientProperties.REQUEST_ENTITY_PROCESSING,RequestEntityProcessing.CHUNKED),否则这不起作用;因为内容长度未知. 虽然有些工作,但分块转移似乎丢失了一些文件.例如: num_docs 500000 numFound 499249 也许它发送的块像: {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");
}
}
}
});
解决方法关闭这个 – 我不小心意外地关闭了流,所以它最终真的丢失了文档,这给了我提示等待阻塞队列为空之前关闭执行程序.(编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
