5 개의 Windows 서비스에서 수신하는 MSMQ 큐가 하나 있습니다. 이 목적을 위해 BeginPeek 및 PeekCompleted 이벤트를 사용했습니다. 내 문제는 다섯 가지 서비스 중 하나만 메시지의 올바른 수신자입니다. 4 개 모두 메시지를 읽었지만 아무 작업도 수행되지 않습니다. 이것은 MQ 메시지를 읽을 때만 식별 할 수 있습니다. 이제 내 서비스에 코드를 추가하여 기준이 일치하고 메시지가 올바른 서비스에서 처리되고 있는지 확인한 다음 Receive를 사용하여 MSMQ에서 메시지를 대기열에서 빼고 있습니다. 좋은 생각인가요?
둘째, 메시지가 조건을 충족하지 않고 5 개 서비스 모두가 메시지를 엿 봤지만 수신되지 않은 경우 메시지는 여전히 대기열에 있습니다. 이해 했어요. 그러나 메시지가 제거되지 않았으므로 동일한 메시지가 무한히 처리됩니다.
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
설정된 (짧은) 기간 후에 만료되도록 메시지를 설정합니다. 그런 다음 도착을 기다리는 다른 서비스를받을 수있는 배달 못한 편지 대기열로 이동합니다. 이 서비스는 예를 들어 메시지가 도착하자마자 경고를 발생시킬 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다