Java で HttpURLConnection を使用して、データ プロバイダーからストリーム (JSON) を取得しています。読み込みには BufferedReader を使用し、処理は multiThread で実装しています。JSON ストリームが 1 秒あたり最大 200 の場合は問題ありませんが、それ以上のストリームがこのエラーでプロバイダーによって切断された場合
Force closing connection to xxx.xxx.xxx.xx because it reached the maximum allowed backup (buffer size is 2343 messages)
データを取得するために使用しているコードは.
pool = new ThreadPoolExecutor(150, 200, 0L, TimeUnit.SECONDS, new LinkedBlockingQueue());
connection = getConnection(dataCollectorURL, username, password);
inputStream = connection.getInputStream();
if(inputStream!=null)
{
int responseCode = connection.getResponseCode();
if (responseCode >= 200 && responseCode <= 299) {
long time = Runtime.getRuntime().freeMemory();
BufferedReader reader = new BufferedReader(new InputStreamReader(new GZIPInputStream(inputStream, 100*1024),"utf-8"),100*1024);
BufferedReader errorReader = null;
String line = reader.readLine();
while(line != null){
jParser = new ObjectMapper().getJsonFactory().createJsonParser(line);
try
{
pool.execute(new ParseJSONTwitter(jParser.readValueAsTree()));
if(loopCount==100)
{
printThreadStatus();
loopCount = 0;
}
loopCount++;
}
catch(IOException e)
{
e.printStackTrace();
}
if(reader.ready())
{
line = reader.readLine();
}
else
{
line = null;
}
}
if(!(responseCode>=200 && responseCode<=299) || line==null)
{
if(inputStream!=null)
{
inputStream.close();//To free n/w resources
}
reconnect();
}
} else {
handleNonSuccessResponse(connection);
if(inputStream!=null)
{
inputStream.close();//To free n/w resources
}
reconnect();
}
}
私は何か間違ったことをしていますか?なぜこのエラーが発生するのですか? この問題を知っている人はいますか?
ありがとう。-ビビン