向多个服务发送相同的消息

Same message to several services

我有一个 MSMQ 队列,它被五个 windows 服务侦听。为此,我使用了 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();
 }

感谢您的帮助。 谢谢, 法亚兹

将消息设置为在设定的(短)时间段后过期。然后他们将移至死信队列,您可以在那里等待另一项服务的到来。该服务然后可以发出警报,例如,一旦消息到达。