2008-09-15 4 views
4

Ich erstelle einen Windows-Dienst in C#, der Nachrichten aus einer Warteschlange verarbeitet. Ich möchte ops die Flexibilität geben, den Dienst in der Produktion nach Eigenschaften der Nachricht zu partitionieren. Zum Beispiel sollten sie in der Lage sein zu sagen, dass eine Instanz Web-Bestellungen von Kunde A, eine andere Stapel-Bestellung von Kunde A, eine dritte Web- oder Stapel-Bestellung von Kunde B usw. verarbeitet.Kann ich die Nachrichten, die ich von einer Nachrichtenwarteschlange (MSMQ) erhalte, durch eine Eigenschaft filtern? (a.k.a-Thema)

Meine aktuelle Lösung besteht darin, jeder Kunden-Quellen-Kombination separate Warteschlangen zuzuweisen. Der Prozess, der Aufträge in die Warteschlangen stellt, muss die richtige Entscheidung treffen. Mein Windows-Dienst kann so konfiguriert werden, dass Nachrichten aus einer oder mehreren Warteschlangen abgerufen werden. Es ist unordentlich, aber es funktioniert.

Antwort

5

Nein, aber Sie können PEEK in die Warteschlange und entscheiden, ob Sie wirklich die Nachricht verbrauchen möchten.

3

Verwenden GetMessageEnumerator2() wie folgt aus:

MessageEnumerator en = q.GetMessageEnumerator2(); 

while (en.MoveNext()) 
{ 
    if (en.Current.Label == label) 
    { 
     string body = ((XmlDocument)en.Current.Body).OuterXml; 
     en.RemoveCurrent(); 
     return body; 
    } 
} 
Verwandte Themen