2012-04-03 23 views
1

Ich habe eine Situation, wo die Maxtries in meinem MSMQ 5 ist. Nach 5 mal sendet nservicebus die Nachricht an die Fehler que, die ich definiert habe. Nun möchte ich einige weitere Aktionen ausführen, wenn dies passiert (Ich muss den Status einiger Prozesse auf Fehler aktualisieren) Kann ich einen Handler in meine Saga-Klasse schreiben, um diese Fehlerwarteschlangen zu lesen?Wie Handler für Fehlerwarteschlangen in NServiceBus Saga geschrieben?

Vielen Dank im Voraus Haris

Antwort

2

Wenn Ihr 2.x verwenden Sie einen separaten Endpunkt betrachten möchten vielleicht schreiben, wo der Fehler-Warteschlange seiner Eingangswarteschlange ist. Der Nachteil ist, dass die Nachrichten aus der Warteschlange kommen. Angenommen, Sie möchten sie immer noch speichern, müssen Sie sie in eine Datenbank oder eine andere Art von Speicher verschieben.

Sie könnten auch eine Saga schreiben, die die Fehlerwarteschlange abfragt, um nach Nachrichten zu suchen und den entsprechenden Status zu aktualisieren. Nach jeder Überprüfung der Warteschlange müssen Sie ein anderes Timeout anfordern.

In 3.0 haben Sie mehr Kontrolle über die Ausnahmen und können Ihren eigenen Weg implementieren, um die Fehler zu behandeln. Wenn Sie die Schnittstelle IManageMessageFailures implementieren, können Sie dort arbeiten.

+0

Vielen Dank. Ich denke, wir werden zuerst NServiceBus 3.0 installieren und dann sehen, was die beste Lösung ist. – user993104

0

Als Alternative zu den von Adam bereitgestellten Lösungen können Sie Ereignisse abonnieren, die von ServiceControl ausgelöst werden, die ausgelöst werden, wenn eine Nachricht an die Fehlerwarteschlange gesendet wird. Siehe dazu die offizielle Dokumentation: http://docs.particular.net/servicecontrol/contracts

Ein anderer Ansatz wäre die hier beschriebene Benachrichtigungs-API: http://docs.particular.net/nservicebus/errors/subscribing-to-error-notifications. Sie können bestimmte Ereignisse (keine Ereignismeldungen) wie "MessageSentToErrorQueue" direkt auf dem Endpunkt abonnieren, sodass Sie die Fehlerwarteschlange nicht benötigen.