2017-10-14 56 views
0

我有一个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

如何?该消息将不再位于主队列中。 –