2012-12-05 9 views
9

Ich verwende MSMQ Version 4 und eine Transaktionswarteschlange haben. Ich verwende WCF, um die Warteschlange für eingehende Nachrichten anzuhören.Wie kann ich explizit Nachrichten als vergifteten in einer MSMQ-Transaktion mit WCF

Während der Verarbeitung besteht eine Abhängigkeit von Komponenten von Drittanbietern, die möglicherweise fehlschlagen oder für einen längeren Zeitraum nicht verfügbar sind. Um dies zu kompensieren, benutze ich die Funktionalität zur Behandlung von Giftnachrichten in MSMQ 4 (http://msdn.microsoft.com/en-us/library/aa395218.aspx), um die Anzahl der Wiederholungen von Nachrichten mit der Anzahl der Wartezeiten zu wiederholen.

In bestimmten Situationen weiß ich jedoch, dass die Eingangsnachricht ungültig/vergiftet ist. Wenn dies geschieht, würde das Werfen von Ausnahmen dazu führen, dass die Nachricht der Routine zur Verarbeitung von Giftnachrichten folgt, wie alle anderen Nachrichten mit allen Wiederholungen und Wartezeiten. Aber wenn ich weiß, dass die Nachricht vergiftet ist, sehe ich keinen Grund, es erneut zu versuchen und die konfigurierte Zeit zu warten, bis sie von der Giftwarteschlange bearbeitet wird.

Gibt es eine Möglichkeit, eine Nachricht explizit als vergiftet zu markieren, so dass sie nicht dem konfigurierten Wiederholungsfluss folgt und sofort in die Giftwarteschlange wechselt?

+0

Ich habe genau das gleiche Problem., Ich nehme an, Sie haben keine Lösung gefunden? – Leon

+0

@Leon In der Tat, noch keine Lösung gefunden. – Leo

+0

Ich bin ein MSMQ-Neuling und ich habe das nicht versucht - Entschuldigung, wenn es albern ist. Dies war in dem Artikel, mit dem Sie verbunden sind: "Die Warteschlange ist eine Unterwarteschlange der Hauptwarteschlange, heißt" Gift "und wird automatisch von MSMQ generiert. Geben Sie den Hauptwarteschlangennamen gefolgt von einem" ; "und der Name der Unterwarteschlange, in diesem Fall -" poison ". Konnten Sie die Giftnachrichten nicht erkennen, sie aus der Hauptwarteschlange entfernen und sie manuell an die eingebaute Giftwarteschlange senden? –

Antwort

0

Nun, ich werde vorschlagen, in diesem Fall speichern Anfrage Daten in der DB und werfen keine Ausnahme so für WCF-Nachricht wird erfolgreich verarbeitet und wird aus der Warteschlange entfernt werden.

Diese Daten können wir später verarbeiten, wenn es erforderlich ist, ist es einfach, Daten von DB zu verarbeiten, als die Warteschlange zu überwachen/verwalten.

Sie können einige Konfigurationen basierend darauf haben, dass Sie den nächsten Verarbeitungszeitstempel der Nachricht festlegen können, und ein Thread kann solche Nachrichten von der DB erneut verarbeiten.