2011-10-12 2 views
2

새 메일을 여러 사서함에서 모니터링하는 Windows 서비스가 있습니다. 새 메일이 도착하면 서비스가 처리 할 책임을 결정합니다. 그것을 파싱하여 데이터베이스에 입력하거나, 무시하거나, 인식하지 못하면 누군가에게 전달할 수 있습니다.다른 모든 작업을 수행하는 동안 오프라인 데이터베이스 다루기?

성공적으로 완료 될 때까지 n 분마다 서비스가 시도되고 다시 시도되는 이메일 서버가 다운 된 경우 이미 작동 중입니다. 다른 문제는 데이터베이스 서버가 다운 될 경우 어떻게되는지입니다. 우리의 서비스는 여전히 잘 실행되고 전자 메일을 파싱 할 수 있지만 데이터베이스 삽입이 실패하면 중단됩니다.

데이터베이스가 다운되는 것을 어떻게 처리합니까? 내 서비스가 데이터베이스와 상호 작용해야하는 대신 NServiceBus와 같은 메시징 프레임 워크를 사용하여 추가해야하는 새 항목마다 메시지를 보냅니다. 그런 다음이 서비스가 시도하고 처리합니다. 어떤 이유로 든 처리가 실패한 경우 (대개 데이터베이스가 다운되었을 가능성이 있음) 나중에 처리 할 수 ​​있도록 대기열에 항목을 남겨두기 만하면됩니까?

+3

마지막 단락에 해당 : MSMQ와 같은 안정적인 메시징 대기열 프로토콜을 살펴보십시오. DB가 다운되면 서비스는 계속 작동 할 수 있으며 작업 대기열은 DB가 백업 될 때까지 큐에 대기합니다. 대기중인 모든 메시지가 전달됩니다. –

답변

2

하나의 가능성 : 데이터베이스가 다운

경우, XML 또는 바이너리 형식으로 완성 된 작품을 직렬화 및 데이터베이스가 다운되면 파일 시스템에 저장합니다. 오프라인 대기열이라고 생각하십시오. 데이터베이스가 다시 돌아 오면 프로세스가 데이터를 역 직렬화하여 데이터베이스에 저장하게합니다.

그런 식으로 데이터를 처리 한 것으로 간주하고 나중에 삽입 할 수 있습니다. 대기열 (백업)은 파일 시스템입니다.

관련 문제