7

Apache http client v4.5 kullanıyorum ve REST istemcisi olarak kullanıyorum. Bazı durumlarda bir hatayı biliyorum "[oku] I/O hatası: "Zaman aşımına uğradı", alınan içeriği okuduğunda ve son bir ileti olarak gösterdiğinde httpclient çerçevesinden gelir.Apache Http İstemcisi "[okuma] G/Ç hatası yazdırır:" Zaman aşımına uğradı ""

Bir etkisi olmayacak gibi görünüyor, ancak birisinin nerede bir fikri olduğunu merak ediyorum. gelen ve nasıl çözülebileceği. aşağıdaki konu (link) o "mutlithreaded" yapılandırmasında bir sorun olarak görünmektedir göre.

ben http istemci yalnızca varsayılan yapılandırması kullanan Ancak ben kullanıyorum iken edilir sürüm v4 Ben hiçbir ipucu yok ben "çok iş parçacıklı" ayarını, herhangi bir fark yaratıp yaratmadığını görmek için false olarak ayarlayabilirim.

Ayrıca zaman aşımlarını ayarlamayı denedim, ancak yardımcı olmadı.

Herhangi bir ipucu?

Giriş:

15:48:05.984 [main] DEBUG org.apache.http.wire - http-outgoing-8 << "HTTP/1.1 200 OK[\r][\n]" 
15:48:05.984 [main] DEBUG org.apache.http.wire - http-outgoing-8 << "Date: Tue, 29 Dec 2015 14:48:03 GMT[\r][\n]" 
15:48:05.984 [main] DEBUG org.apache.http.wire - http-outgoing-8 << "Server: Apache/2.4.12 (Win32) OpenSSL/1.0.1l PHP/5.6.8[\r][\n]" 
15:48:05.984 [main] DEBUG org.apache.http.wire - http-outgoing-8 << "X-Powered-By: PHP/5.6.8[\r][\n]" 
15:48:05.985 [main] DEBUG org.apache.http.wire - http-outgoing-8 << "Cache-Control: nocache, private[\r][\n]" 
15:48:05.985 [main] DEBUG org.apache.http.wire - http-outgoing-8 << "Content-Length: 99[\r][\n]" 
15:48:05.985 [main] DEBUG org.apache.http.wire - http-outgoing-8 << "Keep-Alive: timeout=5, max=99[\r][\n]" 
15:48:05.985 [main] DEBUG org.apache.http.wire - http-outgoing-8 << "Connection: Keep-Alive[\r][\n]" 
15:48:05.985 [main] DEBUG org.apache.http.wire - http-outgoing-8 << "Content-Type: application/json[\r][\n]" 
15:48:05.985 [main] DEBUG org.apache.http.wire - http-outgoing-8 << "[\r][\n]" 
15:48:05.985 [main] DEBUG org.apache.http.wire - http-outgoing-8 << "{"success":true,"data":{"id":1946,"location":"http:\/\/localhost:9001\/shop\/api\/articles\/1946"}}" 
15:48:06.016 [main] DEBUG org.apache.http.wire - http-outgoing-8 << "[read] I/O error: Read timed out" 

benim Http istemci başlatma Bir istek üzerine zaman aşımları ayarlayarak, benim durumumda httpclient 4.5.2 ve kullanıyorum

HttpClientBuilder httpBuilder = HttpClientBuilder.create(); 

//  set timeout did not helped 
//  RequestConfig.Builder requestBuilder = RequestConfig.custom(); 
//  requestBuilder = requestBuilder.setConnectTimeout(timeout); 
//  requestBuilder = requestBuilder.setConnectionRequestTimeout(timeout); 
//  requestBuilder = requestBuilder.setSocketTimeout(timeout); 
//  httpBuilder.setDefaultRequestConfig(requestBuilder.build()); 

HttpClient httpClient = httpBuilder.build(); 
+0

. * Kodunuz * yazdırır. Ne sorduğunuzu net değil, – EJP

+0

Hangi apache http istemcisini kullanıyorsunuz? Peki ben birileri "[okuma] G/Ç hatası: zaman aşımına uğradı" hata mesajının neden olduğunu anladığını soruyorum. – megloff

+0

Bunu ben de görüyorum. Ayrıca, DEBUG gibi bir istisnanın atılmadığını ve HATA olarak kaydedilmediğini de belirtmek gerekir. – BrianC

cevap

2

yardımcı:

HttpPost postRequest = new HttpPost("https://..."); 
postRequest.setHeader(..., ...); 

RequestConfig requestConfig = RequestConfig.custom() 
         .setSocketTimeout(1000) 
         .setConnectTimeout(1000) 
         .build(); 

postRequest.setConfig(requestConfig); 
0

Böyle bir hataya sahip olmanın nedenlerinden biri, sunucunun HTTP bağlantılarını kapatma ilkesini izlemesi olabilir. pon cevap verdi. Eğer durum buysa, o zaman bu hata istemci tarafından bağlantısının yeniden devre dışı bırakarak önlenebilir, böylece istemci bağlantısı hala hayatta olduğunu doğrulamak için gerek olmazdı: Bir şey yazdırmıyor

httpBuilder.setConnectionReuseStrategy((response, context) -> false); 
İlgili konular