2016-10-02 21 views
7

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"); 
     } 
     } 
    } 
    }); 
+0

Her şeyi github'a yüklemek mümkün mü? http://stackoverflow.com/help/mcve – Ivan

+0

uyarınca bunu anladım. :(aptal ve kapanış akıntısı erken –

cevap

3

bu kapatmadan - gerçekten engelleme kuyruğu vasiyetini kapatmadan önce boş beklemek bana ipucu verdi sonunda de docs eksikti bu yüzden yanlışlıkla erken akışı kapatıyordu.

İlgili konular