2017-03-23 3 views
1

Ich verwende MSMQ-Transport in unserer Rebus-Implementierung. Unten ist der Code für Rebus-Dienst starten:Handle Rebus MSMQ Warteschlange löschen

BuiltinHandlerActivator handlerActivator; 
this.handlerActivator.Handle<TransportMessage>  
(this.HandleTransportMessageAsync); 

var bus = Configure.With(this.handlerActivator) 
      .Transport(t => t.UseMsmq(this.SenderName)) 
      .Routing(r => r.TypeBased().AddEndpointMappingsFromAppConfig()) 
      .Start(); 

Ich möchte Ausnahme/Fehler behandeln, falls jemand versehentlich Nachrichtenwarteschlangen mit Snoop/compmgmt.msc löscht.

Wenn ich die MSMQ-Nachrichtenwarteschlange manuell in Nachricht entfernen Warteschlangen erhalten wir einen Fehler mit Text

Rebus Arbeiter Warteschlange gelöscht wurde - werden keine Nachrichten mehr empfangen

.

Also, wollen Sie wissen, ist es in Rebus möglich, diese Ausnahme zu behandeln und einen Rückruf oder eine andere Möglichkeit zu liefern?

ich bemerkte, dass es eine Klasse MsmqTransport in Rebus.MSMQ Namespace, die belichten Methode AddQueueCallback liefert ähnlichen Rückruf genannt wird. Da ich Neuling für Rebus/MSMQ bin, bin ich nicht in der Lage, herauszufinden, wie man das benutzt. Jede Unterstützung wäre hilfreich.

Antwort

1

Wenn Sie die Eingabewarteschlange oder die Fehlerwarteschlange eines Rebus-Endpunkts löschen, während diese ausgeführt wird, gibt es keine Hilfe, sie wiederherzustellen.

Rebus kann diese Situation natürlich (in seiner Transport Implementierung und in Ihrem Fall - wie Sie richtig herausgefunden haben - in der MsmqTransport Klasse) - handhaben, aber ich (und Mitarbeiter anderer Transporte) muss gedacht haben Irgendwann war das nicht nötig, wahrscheinlich, weil Warteschlangen, die zur Laufzeit plötzlich verschwanden, ein ziemlich ungewöhnliches Szenario wären.

In gewisser Weise möchte ich nicht, dass mein Endpunkt einfach weiterarbeitet, wenn seine Eingangswarteschlange versehentlich gelöscht wurde - ich denke, dass ich ERRORs in den Logs und roten Lämpchen bevorzugen würde, da diese Situation ein ziemlich großes Desaster wäre Produktion.

Ich empfehle Ihnen, die Warteschlangen nicht zu löschen, während das System läuft. Wenn Sie versehentlich eine Warteschlange mit Rebus Snoop auf Ihrem Computer löschen, können Sie Ihren Endpunkt einfach neu starten und dann wird alles wieder normal sein.


btw die AddQueueCallback Methode wurde hinzugefügt, so dass es möglich sein würde, die Benutzerrechte automatisch erstellt Warteschlangen anpassen ... Ich denke, es wäre möglich, etwas ähnliches für bestimmte Fehler zu tun, zum Beispiel wie das Szenario "WHOA THERE'S KAUEUE !! 1". Wenn Sie das Gefühl haben, dass etwas fehlt, sollten Sie es vorschlagen, indem Sie ein Problem erstellen here

+0

Vielen Dank für Ihre schnelle Antwort. Wollte nur noch bestätigen, dass es nicht möglich ist, diese Ausnahme zu behandeln (um eine einfache Nachricht anzuzeigen, wie Sie in der Bearbeitung erwähnt haben)? Eine weitere Sache Kann ich MsmqUtil.QueueExists in einem Hintergrund-Timer-Worker verwenden, um zu überprüfen, ob eine Warteschlange vorhanden ist, wenn keine benutzerfreundliche Nachricht angezeigt wird ..? –

+0

ja :) :) :) :) – mookid8000

+0

(musste viele Smileys hinzufügen, um StackOverflow 15 Min Limit zu erreichen .... :)) – mookid8000