다섯 개의 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
그러나 이는 대기열에있는 모든 메시지를 차단합니다. – Fayaz
어떻게? 메시지는 더 이상 기본 대기열에 없습니다. –