서버 시작 절차 중에 일부 초기화 데이터에 대한 원격 호스트에 액세스합니다. 불행히도 문제의 원격 호스트는 연결에 무작위로 응답하지 않는 것으로 유명합니다 (이 경우 3 %의 시간이 소요될 수 있음). 결과적으로 연결이 영구적으로 중단되며 (영원히 가능할 수 있음), 서버가 적당한 시간 내에 시작되지 않습니다. 1 시간 전에 매달 렸습니다.응답이없는 원격 호스트로 인한 DoS 처리
연결 제한 시간 :
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(connectionTimeout);
for (int i = 0; i <= connectionRetries; i++) {
try {
log.info("Establishing connection to ClassNotes service.");
conn.connect();
break;
} catch (SocketTimeoutException e) {
log.warn("Timed out connecting to ClassNotes service.");
}
}
그것을 끊으면 연결이 이미 서버에 설치되어 있기 때문에, 작동하지 않습니다. 문제는 서버에서 InputStream을 가져 오려고 할 때 발생합니다.
불만스러운 서비스로 작업해야하는 사람이라면 InputStream을 유한 한 횟수의 재 시도로 스레드하고 JVM의 메모리에 무기한으로 매달려있는 하나 또는 두 개의 잠재적 인 스레드를 처리해야합니까? 아니면 Java에서 이것을 처리하는 더 일반적인 방법이 있습니까?
이 시작되지 않는 서버가이 아닌 원격 호스트의 정보가 서버가 전혀 시작되지 않는 것만 큼 끔찍하지 않음을 아는 것도 유용 할 수 있습니다.
미리 감사드립니다.
D' oh! 어떻게 내가 그 API 방법을 놓쳤는 지 모르겠다. 나는 이것이 스레딩에 의지하기 전에 논리적 인 단계라고 생각한다. 감사! –