Frage

Ich habe mehrere Prozesse eine MSMQ-Warteschlange zu überwachen. Ich möchte die Nachricht mehrstufigen Operationen wie erste Peek tun und dann basierend auf einige Kriterien die Nachricht empfangen. Eine einzelne Nachricht kann die Empfangskriterien mehrerer Prozesse übergeben, so dass mehr als ein Prozess versuchen, die gleiche Nachricht zu empfangen. Werden diese Operationen Thread-sicher sein? Wenn nicht, was soll ich tun, einen Prozess zu verhindern, dass es nicht die Nachricht erhält, dass andere Verfahren bereits empfangen?

War es hilfreich?

Lösung

Die Operationen selbst sind Thread-sicher. Wenn Sie jedoch einen mehrstufigen Operation durchführen können Sie feststellen, dass die Ergebnisse nicht konsistent sind (zum Beispiel, spähen, um zu sehen, ob die Daten in der Warteschlange ist, dann ruft die Daten zu empfangen, nur um zu entdecken, es ist nicht, dass es nicht mehr).

Andere Tipps

Nach MSDN :

  

Nur die folgenden Methoden sind Thread-sicher: BeginPeek, BeginReceive, EndPeek (IAsyncResult), EndReceive (IAsyncResult), GetAllMessages, Peek und Empfangen

.

Sie können interessiert sein in einem Blogeintrag Ich schrieb zu diesem Thema.

Kurz gesagt, MSMQ C ++ API ist Thread-sicher, aber nicht alle System.Messaging Methoden sind threadsicher. In dem Blogeintrag diskutiere ich, wie MessageQueue.Send in einem Thread-sichere Art und Weise nennen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top