Jetty üzerinde çalışan bir REST web hizmetim var. Aynı web bağlantısını kullanarak büyük bir belge kümesini bu dinlenme servisine gönderen bir Java istemcisi yazmak istiyorum. İstemci REQUEST_ENTITY_PROCESSING ile CHUNKED olarak ayarla Belgeleri kaybediyorum
Burada bir Yineleyici tabanlı streaming yaklaşımı kurmayı başardı:Content-length
bilinmemektedir çünkü
clientConfig.property(ClientProperties.REQUEST_ENTITY_PROCESSING, RequestEntityProcessing.CHUNKED);
set sürece bu işe yaramazsa
Sending a stream of documents to a Jersey @POST endpoint
.
Biraz çalışırken, yığınlanmış aktarım birkaç belgeyi kaybediyor gibi görünüyor. Örneğin: gibi
num_docs 500000
numFound 499249
Belki gönderiyor parçalar:
{some:doc}, {some:doc}, {some:doc}, {some:doc}, {some:doc}, {some:doc}, {some:do
yüzden bazı uçta her zaman kaybediyorum? GÜNCELLEME: Bu konuda yanılmışım.
Bunu nasıl yapmamalı? Başka neler olabileceği hakkında bir fikrin var mı?
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");
}
}
}
});
Her şeyi github'a yüklemek mümkün mü? http://stackoverflow.com/help/mcve – Ivan
uyarınca bunu anladım. :(aptal ve kapanış akıntısı erken –