2017-10-14 6 views
0

다섯 개의 Windows 서비스에서 수신되는 하나의 MSMQ 대기열이 있습니다. 이 목적을 위해 BeginPeek 및 PeekCompleted 이벤트를 사용했습니다. 내 문제는 다섯 가지 서비스 중 하나입니다. 단 하나의 서비스 만 메시지의 올바른 수신자입니다. 네 명 모두가 메시지를 읽었지만 아무런 작업도 수행되지 않습니다. 이 메시지는 MQ 메시지를 읽을 때만 식별 할 수 있습니다. 이제 서비스에서 서비스 기준에 일치하는 메시지가 올바른 서비스로 처리되고 있는지 확인한 다음 Receive를 사용하여 MSMQ에서 메시지를 큐에서 제거합니다. 그거 좋은 생각이야?여러 서비스에 동일한 메시지가 표시됩니다.

둘째, 메시지가 조건을 충족하지 못하고 다섯 개의 서비스 모두가 엿보지만 수신되지 않은 경우 메시지는 여전히 대기열에 있습니다. 이해 했어. 그러나 메시지는 절대로 제거되지 않으므로 같은 메시지가 무한정 처리됩니다.

private void queue_PeekCompleted(object sender, PeekCompletedEventArgs e) 
{ 
MessageQueue queue = (MessageQueue)sender; 
//Message msg = queue.EndPeek(e.AsyncResult); 
Message msg = e.Message; 
//Read message and check if the criteria matches 
if(CriteriaMatches) 
{ 
    queue.ReceiveById(e.Message.Id); 
} 


queue.EndPeek(e.AsyncResult); 
queue.BeginPeek(); 
} 

감사합니다. 감사합니다. Fayaz

답변

0

설정된 (짧은) 기간 후에 만료되도록 메시지를 설정하십시오. 그런 다음 도착 예정자를 기다리는 다른 서비스를 가질 수있는 배달 대기열로 이동합니다. 이 서비스는 예를 들어 메시지가 도착하자마자 경고를 발생시킬 수 있습니다.

+0

그러나 이는 대기열에있는 모든 메시지를 차단합니다. – Fayaz

+0

어떻게? 메시지는 더 이상 기본 대기열에 없습니다. –