2016-03-30 14 views
0

Ich führe einen NServiceBus-Endpunkt auf einer Azure-Arbeitsrolle aus. Ich sende im Moment alle Diagnosen zum Tabellenspeicher. Ich erhielt Nachrichten in meiner DLQ und konnte nicht herausfinden, warum ich keine Ausnahmen in meinem Tabellenspeicher ablegen konnte.NServiceBus-Ausnahmen, die als INFO-Nachrichten protokolliert werden

Es stellt sich heraus, dass NSB die Ausnahmen als INFO protokolliert, weshalb ich sie zwischen der ganzen ausführlichen Protokollierung nicht leicht finden konnte.

In meinem Fall konnten die Abhängigkeiten eines Befehlshandlers nicht aufgelöst werden, sodass Autofac eine Ausnahme auslöst. Ich verstehe total warum die Ausnahme ausgelöst wird, ich verstehe einfach nicht warum sie als INFO angemeldet sind. Die Nachricht endet in meiner DLQ, und ich habe nur eine INFO-Ablaufverfolgung, um zu verstehen, warum.

Gibt es einen Grund, warum Ausnahmen in NSB auf diese Weise behandelt werden?

+0

Wenn Sie sagen "Es stellt sich heraus, dass NSB die Ausnahmen als INFO protokolliert", meinst du, Handler nicht laden Ausnahmen oder buchstäblich alle Ausnahmen? Wenn der Handler geladen ist und eine Ausnahme ausgelöst wird, wird dies als Fehler protokolliert. Kannst du das bitte klären? –

+0

Ich meine, dass der fehlgeschlagene Handler als INFO im Protokoll angezeigt wird: 2016-03-31 08: 32: 45.910 INFO NServiceBus.Unicast.Transport.TransportReceiver Fehler beim Verarbeiten der Nachricht Autofac.Core.DependencyResolutionException: Keine von Die Konstruktoren, die mit 'Autofac.Core.Activators.Reflection.DefaultConstructorFinder' vom Typ 'CommandHandler' gefunden wurden, können mit den verfügbaren Diensten und Parametern aufgerufen werden. Ich würde erwarten, dass dies anstelle einer INFO als Fehler protokolliert wird. – Laila

Antwort

1

NServiceBus protokolliert das Container-Problem nicht als Fehler, da es bei dem Versuch auftritt, eine Nachricht zu verarbeiten. Es wird versucht, die Wiederholung auf der ersten Ebene und auf der zweiten Ebene zu wiederholen. Wenn SLR ausgeführt wird, wird eine WARN über den erneuten Versuch protokolliert. Letztendlich wird eine Nachricht nicht verarbeitet und eine Fehlermeldung wird protokolliert. NSB and Autofac sample kann verwendet werden, um dies zu reproduzieren.

Wenn Endpunkt mit einer horizontal skaliert Rolle läuft und MadDeliveryCount ist nicht groß genug, alle Rolleninstanzen aufzunehmen und Wiederhol-Zahl, die jede Instanz halten würde, wird dies in DeliveryCount führen zu erreichen, es ist max während NServiceBus Endpunkt Instanz noch denkt, es hat Versuche, bevor die Nachricht an eine Fehlerwarteschlange gesendet und ein Fehler protokolliert wird. Ähnlich dem question here würde ich empfehlen, MaxDeliveryCount zu erhöhen.

Es gibt eine offene NServiceBus issue, um eine native Unterstützung für SLR-Zähler zu haben. Sie können dem Problem Ihre Stimme hinzufügen. Die nächste Version von NServiceBus (V6) protokolliert die Nachrichten-ID zusammen mit der Ausnahme, sodass Sie zumindest eine Übereinstimmung zwischen der Nachricht in DLQ und der Protokolldatei herstellen können.