Я использую Future Callable для одновременного вызова следующего метода.И я получил исключение «java.io.IOException: сервер возвратил код ответа HTTP: 502 для URL», которое было захвачено третьим оператором catch следующего кода.
Есть ли способ изменить этот код, чтобы сделать егопоток безопасно?Или это исключение возникает просто потому, что сервер не может обработать несколько одновременных HTTP-запросов (сервер занят), поэтому он отклоняет некоторые запросы и выводит код ошибки HTTP 502.Я думаю, что если сервер занят, обработка должна замедлиться и не должна выдавать исключение.
private String executeParser(String sku, String inputText, String msgId) {
String jsonOutput = null;
String urlStr = null;
try {
String encodedInputText = URLEncoder.encode("\"" + inputText + "\"", "UTF-8").replace("+", "%20");
urlStr = parserServerSelection();
URL url = new URL(urlStr + encodedInputText);
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
jsonOutput = in.readLine();
in.close();
LOGGER.info("{} is parsed by {} {}", sku, urlStr, msgId);
} catch (UnsupportedEncodingException e) {
LOGGER.error("UnsupportedEncodingException failed! {} {} {} {}", sku, inputText, urlStr, msgId);
e.printStackTrace();
} catch (MalformedURLException e) {
LOGGER.error("MalformedURLException failed! {} {} {} {}", sku, inputText, urlStr, msgId);
e.printStackTrace();
} catch (IOException e) {
LOGGER.error("IOException failed! {} {} {} {}", sku, inputText, urlStr, msgId);
e.printStackTrace();
}
return jsonOutput;
}
РЕДАКТИРОВАТЬ:
private String parserServerSelection() {
int numOfParsers = PARSER_WEBSERVICE_URL.size();
if (numOfParsers == 1) {
return PARSER_WEBSERVICE_URL.get(0);
}
Random random = new Random();
return PARSER_WEBSERVICE_URL.get(random.nextInt(numOfParsers));
}