2009-09-09 4 views
3

MSMQ 멀티 캐스트를 사용할 때 (멀티 캐스트를 사용할 수있는) 큐가 일부 메시지를 받고 컴퓨터가 일시적인 네트워크 연결 손실을 경험하면 연결이 다시 설정되면 메시지를 다시 수신하기 시작합니다. 네트워크 중단이 짧은 경우 큐는 모든 메시지를 수신합니다 (수신 시스템이 연결 해제 된 동안 전송 된 경우 포함). 그러나 지속 시간이 길면 (몇 분) 일부 메시지가 손실됩니다 ... 수신 메시지에 갭이 있습니다.MSMQ의 멀티 캐스트를 사용할 때 복구 할 수없는 데이터 손실을 어떻게 감지합니까?

MSMQ 멀티 캐스트가 안정적이지만 (배달은 보장되지 않음) 예상되는 동작입니다. 내 질문은 데이터 손실이있을 때 MSMQ가 정보를 노출하는지 여부입니다. 올바르게 이해하면 PGM은 이미 "복구 할 수없는 데이터 손실"을 감지 할 수 있지만 MSMQ는이 정보를 노출합니까?

하나의 생각은 각 전송시 증가하는 각 메시지에 정수를 포함시키는 것입니다. 이렇게하면 수신자가 개별 발신자의 메시지 간격을 감지 할 수 있습니다. 그러나 PGM이 이미 이것을 수행했다고 생각합니다. PGM/MSMQ가 이미이를 감지 할 수있는 경우이를 응용 프로그램 수준에 추가하고 싶지 않습니다.

제안 사항?

답변

1

필자는 MSMQ를 사용한 적이 없기 때문에 기본 PGM 소켓의 복구 할 수없는 손실을 알리는 방법이 있는지 확실하지 않습니다. 그러나 원시 PGM 소켓에서 누락 된 패킷을 복구 할 수없는 경우 소켓이 연결이 끊어집니다 (예 : 보낸 사람이 재전송 캐시에 더 이상 데이터를 갖고 있지 않음). 이 경우 해당 소켓의 Receive 메서드는 WSAECONNRESET과 함께 반환됩니다. MSMQ에서 기본 소켓 연결 재설정을 알리는 연결/연결 끊기 이벤트가 있습니까?

필자는 개인적으로 항상 내 메시지에 응용 프로그램 수준 헤더를 포함시킵니다. 소스 (수신자의 경우 수신자가 여러 수신자로부터 데이터를 수신하려는 경우) 및 시퀀스 번호 등록 정보를 확인한 다음 신뢰할 수없는 프로토콜을 통해 누락 된 데이터를 요청할 수있는 대역 외 스냅 샷 서비스와 짝을 이루는 간격을 확인하십시오 TCP와 같습니다.

관련 문제