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?
Antworten
Zu viele Anzeigen?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.
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).