Übersicht über Service Bus-Warteschlangen für unzustellbare Nachrichten

Azure Service Bus-Warteschlangen und -Themenabonnements verfügen über eine sekundäre Unterwarteschlange, die als Warteschlange für unzustellbare Nachrichten (Dead Letter Queue, DLQ) bezeichnet wird. Die Warteschlange für unzustellbare Nachrichten muss nicht explizit erstellt werden, und kann nicht gelöscht oder unabhängig von der Hauptentität verwaltet werden.

Dieser Artikel erläutert Warteschlangen für unzustellbare Nachrichten in Service Bus. Ein Großteil der Informationen wird durch das Beispiel Dead-Letter Queues auf GitHub veranschaulicht.

Die Warteschlange für unzustellbare Nachrichten

Die Warteschlange für unzustellbare Nachrichten dient zum Speichern von Nachrichten, die an keinen Empfänger übermittelt oder nicht verarbeitet werden können. Nachrichten können dann aus dieser Warteschlange entfernt und überprüft werden. Eine Anwendung kann mithilfe eines Operators Probleme beheben und die Nachricht erneut senden, den Fehler protokollieren und korrigierende Maßnahmen ergreifen.

Im Hinblick auf API und Protokoll ähnelt die Warteschlange für unzustellbare Nachrichten weitgehend anderen Warteschlangen, mit der Ausnahme, dass Nachrichten nur durch die übergeordnete Entität über den Vorgang für unzustellbare Nachrichten gesendet werden können. Darüber hinaus ist die Gültigkeitsdauer nicht relevant, und eine Nachricht kann nicht von einer Warteschlange für unzustellbare Nachrichten aus als unzustellbar gekennzeichnet werden. Die Warteschlange für unzustellbare Nachrichten bietet vollständige Unterstützung für die Peek/Lock-Übermittlung und Transaktionsvorgänge.

Es wird keine automatische Bereinigung der Warteschlange für unzustellbare Nachrichten durchgeführt. Nachrichten verbleiben in dieser Warteschlange, bis Sie sie explizit daraus abrufen und abschließen.

Nachrichtenanzahl der Warteschlange für unzustellbare Nachrichten

Es ist nicht möglich, auf Themenebene die Anzahl von Nachrichten in der Warteschlange für unzustellbare Nachrichten abzurufen. Das liegt daran, dass sich die Nachrichten nicht auf Themenebene befinden. Wenn ein Absender eine Nachricht an ein Thema sendet, wird diese stattdessen innerhalb von Millisekunden an Abonnements für das Thema weitergeleitet und ist daher nicht mehr auf der Themenebene vorhanden. Sie können Nachrichten in der Warteschlange für unzustellbare Nachrichten anzeigen, die dem Abonnement für das Thema zugeordnet ist. Im folgenden Beispiel wird im Service Bus Explorer angegeben, dass sich in der Warteschlange für unzustellbare Nachrichten für das Abonnement „test1“ derzeit 62 Nachrichten befinden.

Image showing 62 messages in the dead-letter queue.

Sie können die Anzahl von Nachrichten in der Warteschlange für unzustellbare Nachrichten auch abrufen, indem Sie den folgenden Azure CLI-Befehl verwenden: az servicebus topic subscription show.

Verschieben von Nachrichten in die Warteschlange für unzustellbare Nachrichten

Es gibt verschiedene Aktivitäten in Service Bus, durch welche Nachrichten aus dem Messaging-Engine selbst per Push in die Warteschlange für unzustellbare Nachrichten übertragen werden. Eine Anwendung kann Nachrichten auch explizit in die Warteschlange für unzustellbare Nachrichten verschieben. Die folgenden beiden Eigenschaften (Ursache und Beschreibung für unzustellbare Nachricht) werden zu unzustellbaren Nachrichten hinzugefügt. Anwendungen können ihre eigenen Codes für die Eigenschaft „Ursache für unzustellbare Nachricht“ definieren, aber das System legt die folgenden Werte fest:

Ursache für unzustellbare Nachrichten Fehlerbeschreibung für unzustellbare Nachrichten
HeaderSizeExceeded Das Größenkontingent für diesen Datenstrom wurde überschritten.
TTLExpiredException Die Nachricht ist abgelaufen und wurde in die Warteschlange für unzustellbare Nachrichten verschoben. Weitere Informationen finden Sie im Abschnitt Gültigkeitsdauer.
Sitzungs-ID ist NULL. Die für die Sitzung aktivierte Entität erlaubt keine Nachricht, deren Sitzungsbezeichner null ist.
MaxTransferHopCountExceeded Die maximale Anzahl zulässiger Hops beim Weiterleiten zwischen Warteschlangen wurde überschritten. Dieser Wert ist auf 4 festgelegt.
MaxDeliveryCountExceeded Die Nachricht konnte nach der maximalen Anzahl der Übermittlungsversuche nicht verarbeitet werden. Weitere Informationen finden Sie im Abschnitt Maximale Übermittlungsanzahl.

Maximale Übermittlungsanzahl

Die Anzahl der Übermittlungsversuche von Nachrichten für Service Bus-Warteschlangen und -Abonnements ist begrenzt. Der Standardwert ist 10. Jedes Mal, wenn eine Nachricht unter einer Einsehsperre übermittelt wurde, aber entweder explizit abgebrochen wurde oder die Sperre abgelaufen ist, wird die Übermittlungsanzahl der Nachricht erhöht. Wenn die Übermittlungsanzahl den Grenzwert überschreitet, wird die Nachricht in die Warteschlange für unzustellbare Nachrichten verschoben. Die Ursache für die unzustellbare Nachricht in der Warteschlange wird festgelegt auf: MaxDeliveryCountExceeded. Dieses Verhalten kann nicht deaktiviert werden, aber Sie können die maximale Übermittlungsanzahl erhöhen.

Gültigkeitsdauer

Wenn Sie unzustellbare Nachrichten für Warteschlangen oder Abonnements aktivieren, werden alle Nachrichten nach ihrem Ablauf in die Warteschlange für unzustellbare Nachrichten verschoben. Der Ursachencode für die unzustellbare Nachricht wird festgelegt auf: TTLExpiredException.

Zurückgestellte Nachrichten werden nicht gelöscht oder in die Warteschlange für unzustellbare Nachrichten verschoben, nachdem sie abgelaufen sind. Dieses Verhalten ist beabsichtigt.

Fehler beim Verarbeiten von Regeln für Abonnements

Wenn Sie unzustellbare Nachrichten bei Ausnahmen für die Filterauswertung aktivieren, werden alle Fehler, die während der Ausführung der SQL-Filterregel eines Abonnements auftreten, zusammen mit der verursachenden Nachricht in der Warteschlange für unzustellbare Nachrichten erfasst. Verwenden Sie diese Option nicht in einer Produktionsumgebung, in der nicht alle Nachrichtentypen über Abonnenten verfügen.

Unzustellbare Nachrichten auf Anwendungsebene

Zusätzlich zu den vom System bereitgestellten Features für unzustellbare Nachrichten können Anwendungen die Warteschlange für unzustellbare Nachrichten verwenden, um nicht annehmbare Nachrichten explizit abzulehnen. Hierzu zählen beispielsweise Nachrichten, die aufgrund eines bestimmten Systemproblems nicht richtig verarbeitet werden können, Nachrichten mit fehlerhaften Nutzlasten oder Nachrichten, bei denen Authentifizierungsfehler auftreten, wenn ein Sicherheitsschema auf Nachrichtenebene verwendet wird.

Dazu rufen Sie die ServiceBusReceiver.DeadLetterMessageAsync-Methode auf.

Sie sollten den Typ der Ausnahme in DeadLetterReason und die Stapelüberwachung der Ausnahme in DeadLetterDescription einschließen, da dies die Problembehandlung der Ursache des Problems erleichtert, das dazu führt, dass Nachrichten in die Warteschlange für unzustellbare Nachrichten verschoben werden. Beachten Sie, dass dies dazu führen könnte, dass einige Nachrichten den Kontingentgrenzwert von 256 KB für die Standardebene von Azure Service Bus überschreiten, was ein weiterer Hinweis darauf ist, dass die Premium-Dienstebene für Produktionsumgebungen verwendet werden sollte.

Unzustellbare Nachrichten in Szenarien mit automatischer Weiterleitung

Nachrichten werden unter folgenden Bedingungen an die Warteschlange für unzustellbare Nachrichten übermittelt:

  • Eine Meldung durchläuft mehr als vier Warteschlangen oder Themen, die miteinander verkettet sind.
  • Die Zielwarteschlange oder das Zielthema wurde deaktiviert oder gelöscht.
  • Die Zielwarteschlange oder das Zielthema überschreitet die maximale Entitätsgröße.

Unzustellbare Nachrichten in „Senden über“-Szenarien

  • Wenn die Zielwarteschlange oder das Zielthema deaktiviert ist, wird die Nachricht an eine Warteschlange zur Übertragung unzustellbarer Nachrichten (TDLQ, Transfer Dead Letter Queue) der Quellwarteschlange gesendet.
  • Wenn die Zielwarteschlange oder das Zielthema gelöscht wird, wird die 404-Ausnahme ausgelöst.
  • Wenn die Zielwarteschlange oder Entität die Entitätsgröße überschreitet, wird die Nachricht an eine TDLQ der Quellwarteschlange gesendet.

Pfad zur Warteschlange für unzustellbare Nachrichten

Sie können auf die Warteschlange für unzustellbare Nachrichten zugreifen, indem Sie die folgende Syntax verwenden:

<queue path>/$deadletterqueue
<topic path>/Subscriptions/<subscription path>/$deadletterqueue

Senden von unzustellbaren Nachrichten zur erneuten Bearbeitung

Da Nachrichten, die in der Warteschlange für unzustellbare Nachrichten endeten, wertvolle Geschäftsdaten enthalten können, ist es wünschenswert, diese Nachrichten erneut zu verarbeiten, wenn die Probleme behoben wurden, wegen denen sie ursprünglich unzustellbar waren.

Tools wie Azure Service Bus Explorer ermöglichen manuelles Verschieben von Nachrichten zwischen Warteschlangen und Themen. Wenn viele Nachrichten in der Warteschlange für unzustellbare Nachrichten vorhanden sind, die verschoben werden müssen, kann Code wie dieser dabei helfen, sie alle gleichzeitig zu verschieben. Sachbearbeiter bevorzugen häufig eine Benutzeroberfläche, damit sie untersuchen können, welche Nachrichtentypen aus welchen Quellwarteschlangen aus welchen Gründen nicht erfolgreich verarbeitet wurden, während sie weiterhin Batches von Nachrichten zur erneuten Verarbeitung einreichen können. Tools wie ServicePulse mit NServiceBus bieten diese Funktionen.

Nächste Schritte

Sehen Sie sich unter Aktivieren der Verarbeitung unzustellbarer Nachrichten für eine Warteschlange oder ein Abonnement die verschiedenen Möglichkeiten beim Konfigurieren der Einstellung Verarbeitung unzustellbarer Nachrichten bei Nachrichtenablauf an.