문제

현재 두 개의 Windows 서비스를 구축 중입니다.

  • 첫 번째는 인터넷 연결에서 메시지를 가져와 데이터베이스에 삽입합니다.이것은 빠르고 안정적이며 다른 처리를 수행하지 않도록 설계되었습니다.

  • 두 번째는 마지막 실행 이후 도착한 새 메시지에 대해 일괄 처리를 수행합니다.

새 메시지를 처리할 준비가 된 경우에만 두 번째 서비스가 일괄 처리를 실행하고, 두 번째 서비스에 오류가 발생하면 첫 번째 서비스가 계속 진행되고 그 반대의 경우도 마찬가지가 되도록 하는 방법을 생각 중입니다.현재는 5초마다 루프를 사용합니다.

현재 메시지 대기열을 사용하려고 생각 중입니다. 첫 번째 서비스는 대기열이 비어 있는 경우에만 메시지를 작성하고, 두 번째 서비스는 대기열에 메시지가 포함되어 있는지 확인하고, 그렇지 않은 경우 메시지가 도착할 때까지 비동기 대기 상태로 들어간 다음 메시지를 제거하고 실행하세요.따라서 큐를 실제로는 큐로 사용하는 것이 아니라 상태가 변경될 때 이벤트가 두 번째 서비스로 트리거되는 바이너리 스위치로 사용됩니다.

나는 내가 만나지 못한 더 좋은 방법이 있다고 생각합니다. 누군가 나에게 올바른 방향을 알려줄 수 있습니까?

도움이 되었습니까?

해결책

사실 네 방식은 정확히 이러한 결과를 위해 이를 어떻게 구현할까요?MSMQ를 사용하면 큐에 메시지가 기록되었는지 확인할 필요가 없습니다. 첫 번째 서비스는 큐에 쓰기만 하고 두 번째 서비스는 큐에서 읽어서 처리합니다(활성인 경우).

MSMQ 사용의 장점은 둘 중 하나의 서비스가 다운될 수 있다는 것입니다. 대기열 계속 처리할 수 있습니다.

다른 팁

이 경우 필요한 것은 메일 슬롯뿐인 것 같습니다.첫 번째 서비스는 DB에 저장한 다음 "할 일" 메시지를 보냅니다.다른 하나는 인바운드 메시지를 기다립니다.

MSMQ는 이렇게 단순한 것에 비해 약간 무겁습니다.그런 다음 MSMQ를 사용하여 해당 DB도 완전히 제거할 수 있습니다. 저것 하는 방법일 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top