Ich habe eine MSMQ-Warteschlange, die von fünf Windows-Diensten gehört wird. Ich habe zu diesem Zweck das BeginPeek- und das PeekCompleted-Ereignis verwendet. Mein Problem ist unter fünf Diensten, nur ein Dienst ist der richtige Empfänger der Nachricht. Alle vier lesen nur die Nachricht, aber es wird keine Aktion ausgeführt. Dies kann nur identifiziert werden, wenn wir die MQ-Nachricht lesen. Jetzt habe ich einen Code in meinen Diensten hinzugefügt, um zu überprüfen, ob die Kriterien übereinstimmen und die Nachricht vom richtigen Dienst verarbeitet wird. Dann verwende ich Receive, um die Nachricht aus MSMQ zu entfernen. Ist das eine gute Idee?Gleiche Nachricht an mehrere Dienste
Zweitens, wenn die Nachricht nicht Bedingung erfüllt und alle fünf Dienste haben es nur geschaut, aber nicht erhalten, die Nachricht liegt immer noch in der Warteschlange. Ich verstehe. Aber dieselbe Nachricht wird unendlich oft verarbeitet, da die Nachricht nie entfernt wurde.
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();
}
Schätzen Sie Ihre Hilfe. Danke, Fayaz
Aber dies wird alle Nachrichten in der Warteschlange blockieren. – Fayaz
Wie? Die Nachricht befindet sich nicht mehr in Ihrer Hauptwarteschlange. –