주기적으로 (예 : 매 10 초마다 한 번) 서버에 연결하고 서버에서 데이터를 읽는 방법이 있습니다. 서버가 항상 사용 가능하지 않을 수도 있습니다. 서버를 사용할 수없는 경우 메서드는 예외를 throw합니다.예외 지연
적어도 1 분 동안 서버를 사용할 수없는 경우를 제외하고 예외를 throw하지 않는 래퍼 메서드를 구현하는 가장 좋은 방법은 무엇입니까?
주기적으로 (예 : 매 10 초마다 한 번) 서버에 연결하고 서버에서 데이터를 읽는 방법이 있습니다. 서버가 항상 사용 가능하지 않을 수도 있습니다. 서버를 사용할 수없는 경우 메서드는 예외를 throw합니다.예외 지연
적어도 1 분 동안 서버를 사용할 수없는 경우를 제외하고 예외를 throw하지 않는 래퍼 메서드를 구현하는 가장 좋은 방법은 무엇입니까?
마지막으로 서버에 도달 한 시간을 추적합니다. 서버가 예외를 throw하면 catch하여 마지막으로 서버에 도달 한 시간과 비교하십시오. 그 시간이 1 분 넘으면 예외를 다시 던집니다.
원래 서버에 연결하려고 시도한 시간을 기록한 다음 예외를 잡아야합니다. 예외가 잡히는 시간이 원래 시간 + 1 분보다 길면 예외를 다시 발생시킵니다. 그렇지 않은 경우 다시 시도하십시오.
나는 저격 당했다. – brian
이상적으로는 서버 호출시 시간 초과를 설정할 수 있습니다. 실패하면 catch 블록에서 thread.sleep (600)을 수행하고 다시 시도하십시오. 두 번째 것이 반환되지 않으면 실패합니다.
타임 아웃이 너무 마음에 들었습니다. – marcospereira
의사 코드.
//Create Timer
//Start Timer
bool connected = false;
while (!connected)
try {
//Connect To DB
connected = true;
}
catch (Exception ex) {
if (more than 1 minute has passed)
throw new Exception(ex);
}
}
당신은 재시도 횟수를 가지고 있고, (귀하의 경우 6) 원하는 카운트가 충족 된 경우 다음 당신이 부울 변수를 설정할 수 있습니다
int count = 0;
CheckServer(count);
public void CheckServer(count) {
try
{
// connect to server
}
catch(Exception e)
{
if(count < MAX_ATTEMPTS) {
// wait 10 seconds
CheckServer(count++)
}
else {
throw e;
}
}
}
예외를 던질 수 있는지 여부 서버 연결에 성공, 등등과 같은 당신의 예외 핸들러에서 그것을 확인했습니다
class ServerTester : public Object
{
private bool failing;
private ServerConnection serverConnection;
private Time firstFailure;
public ServerTester(): failing(false)
{
}
public void TestServer() throws ServerException
{
try
{
serverConnection.Connect();
failing = false;
}
catch (ServerException e)
{
if (failing)
{
if (Time::GetTime() - firstFailure > 60)
{
failing = false;
throw e;
}
}
else
{
firstFailure = Time::GetTime();
failing = true;
}
}
}
}
내가 실제 시간 API를이 무엇인지 모르는, 내가 마지막으로 자바를 사용하기 때문에 그것은 오랜만 때문이다. 이것은 당신이 묻는 것을 할 것입니다, 그러나 그것에 관하여 무언가는 맞지 않는 것처럼 보입니다. 예외에 대한 폴링 (polling)은 약간 뒤로 향하는 것처럼 느껴지지만, 서버를 다루기 때문에 내 머리 꼭대기에서 다른 방법을 생각할 수 없다.
예외 처리는 단지 이며 매우 특별한 용도 인 일반적인 "반환"시스템의임을 기억하십시오. (자세한 내용은 "모나드"를 읽어보십시오.) 신호하려는 예외 상황이 자연스럽게 Java의 예외 처리 시스템에 맞지 않으면 예외를 사용하는 것이 적절하지 않을 수 있습니다.
평소와 같이 오류 상태를 추적 할 수 있습니다 : 상태 변수를 유지하고 필요에 따라 성공/실패 정보로 업데이트 한 다음 상태가 변경되면 적절히 응답하십시오.
서버가 실제로 예외를 throw하지 않습니다. 클라이언트 코드가 throw됩니다.) 그러나 여전히 대답에 +1을 남겼습니다. –