7 Stimmen

Ist MSMQ thread-sicher?

Ich habe mehrere Prozesse, die eine MSMQ-Warteschlange überwachen. Ich möchte mehrstufige Operationen durchführen, z. B. zuerst die Nachricht abfragen und dann auf der Grundlage einiger Kriterien die Nachricht empfangen. Eine einzelne Nachricht kann die Empfangskriterien mehrerer Prozesse erfüllen, so dass mehr als ein Prozess versuchen kann, dieselbe Nachricht zu empfangen. Sind diese Vorgänge thread-sicher? Wenn nicht, was sollte ich tun, um zu verhindern, dass ein Prozess die Nachricht, die ein anderer Prozess bereits erhalten hat, nicht empfangen kann?

14voto

EggyBach Punkte 4040

Según MSDN :

Nur die folgenden Methoden sind thread-sicher: BeginPeek, BeginReceive, EndPeek(IAsyncResult), EndReceive(IAsyncResult), GetAllMessages, Peek, und Receive.

6voto

Sie interessieren sich vielleicht für eine Blogeintrag Ich habe über dieses Thema geschrieben.

Kurz gesagt, die MSMQ C++ API ist thread-sicher, aber nicht alle System.Messaging Methoden sind thread-sicher. In diesem Blogeintrag erkläre ich, wie man MessageQueue.Send thread-sicher aufruft.

5voto

Brad Wilson Punkte 64944

Die Operationen selbst sind thread-sicher. Wenn Sie jedoch eine mehrstufige Operation durchführen, kann es vorkommen, dass die Ergebnisse nicht konsistent sind (z. B. wenn Sie nachsehen, ob Daten in der Warteschlange sind, dann die Daten abrufen, um sie zu erhalten, und dann feststellen, dass sie nicht mehr da sind).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X