Ich verwende MSMQ Version 4 und habe eine Transaktionswarteschlange. Ich verwende WCF, um die Warteschlange für eingehende Nachrichten anzuhören.
Während der Verarbeitung besteht eine Abhängigkeit von Komponenten von Drittanbietern, die möglicherweise fehlschlagen oder für längere Zeit nicht verfügbar sind. Um dies zu kompensieren, verwende ich die Funktion zum Verarbeiten von Giftnachrichten in MSMQ 4 ( Ссылка ), um Nachrichten erneut zu versuchen x Anzahl der Male mit y Menge der Wartezeit.
In bestimmten Situationen weiß ich jedoch, dass die Eingabenachricht 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 behandelt wird.
Gibt es eine Möglichkeit, eine Nachricht explizit als vergiftet zu markieren, damit sie nicht dem konfigurierten Wiederholungsversuch folgt und sofort in die Gift-Warteschlange verschoben wird?
Nun, ich werde vorschlagen, in diesem Fall Daten in der Datenbank zu speichern und keine Ausnahme auszulösen, damit die WCF-Nachricht erfolgreich verarbeitet wird und aus der Warteschlange entfernt wird.
Diese Daten, die wir später verarbeiten können, wenn es erforderlich ist, ist es einfach, Daten von DB zu verarbeiten, als die Warteschlange zu überwachen / verwalten.
Sie können eine Konfiguration haben, die darauf basiert, dass Sie den nächsten Verarbeitungszeitstempel der Nachricht festlegen können, und ein Thread kann solche Nachrichten von der DB erneut verarbeiten.
Tags und Links wcf .net msmq msmqintegrationbinding