Untersuchen der Dauerhaftigkeit der Ereignisübermittlung

Abgeschlossen

Event Grid bietet permanente Übermittlung. Es wird versucht, jedes Ereignis mindestens ein Mal für jedes übereinstimmende Abonnement sofort zu übermitteln. Wenn der Endpunkt eines Abonnenten den Empfang eines Ereignisses nicht bestätigt oder wenn ein Fehler auftritt, wiederholt Event Grid die Übermittlung auf Grundlage eines festen Wiederholungszeitplans und einer festen Wiederholungsrichtlinie. Standardmäßig übermittelt Event Grid jeweils ein Ereignis gleichzeitig an den Abonnenten, und die Nutzdaten sind ein Array mit einem einzelnen Ereignis.

Hinweis

Bei der Ereignisübermittlung durch Event Grid wird unter Umständen die Reihenfolge nicht eingehalten, sodass Abonnenten die Ereignisse ggf. nicht in der richtigen Reihenfolge erhalten.

Wiederholungszeitplan

Bei einem Fehler für eine Ereignisübermittlung entscheidet Event Grid je nach Art des Fehlers, ob die Übermittlung wiederholt, das Ereignis als unzustellbar markiert oder es gelöscht werden soll.

Handelt es sich bei dem vom abonnierten Endpunkt zurückgegebenen Fehler um einen konfigurationsbedingten Fehler, der nicht durch eine erneute Übermittlung behoben werden kann (z. B. wenn der Endpunkt gelöscht wurde), markiert Event Grid das Ereignis als unzustellbar oder löscht es, wenn diese Option nicht konfiguriert ist.

In der folgenden Tabelle sind die Endpunkt- und Fehlertypen beschrieben, für die kein Wiederholungsversuch ausgeführt wird:

Endpunkttyp Fehlercodes
Azure-Ressourcen 400 – Ungültige Anforderung, 413 – Anforderungsentität zu groß, 403 – Unzulässig
Webhook 400 – Ungültige Anforderung, 413 – Anforderungsentität zu groß, 403 – Unzulässig, 404 – Nicht gefunden, 401 – Nicht autorisiert

Wichtig

Wenn die Warteschlange für unzustellbare Nachrichten nicht für den Endpunkt konfiguriert ist, werden Ereignisse gelöscht, wenn die oben genannten Fehler auftreten. Es empfiehlt sich, die Warteschlange für unzustellbare Nachrichten zu konfigurieren, wenn Sie nicht möchten, dass diese Arten von Ereignissen gelöscht werden.

Wenn der vom abonnierten Endpunkt zurückgegebene Fehler nicht in der Liste oben enthalten ist, wartet Event Grid nach dem Übermitteln einer Nachricht 30 Sekunden auf eine Antwort. Nach 30 Sekunden, wenn der Endpunkt nicht geantwortet hat, wird die Nachricht zur Wiederholung in die Warteschlange eingereiht. Event Grid verwendet exponentiell ansteigende Wartezeiten für Wiederholungsversuche für die Ereignisübermittlung.

Wenn der Endpunkt innerhalb von 3 Minuten antwortet, versucht Event Grid, das Ereignis aus der Wiederholungswarteschlange auf bestmögliche Weise zu entfernen, aber es können dennoch weiterhin Duplikate empfangen werden. Event Grid fügt allen Wiederholungsschritten eine geringfügige Randomisierung hinzu und kann opportunistisch bestimmte Wiederholungen überspringen, wenn ein Endpunkt konsistent fehlerhaft ist, für einen längeren Zeitraum ausgefallen ist oder überlastet zu sein scheint.

Wiederholungsrichtlinie

Sie können die Wiederholungsrichtlinie beim Erstellen eines Ereignisabonnements anpassen, indem Sie die folgenden beiden Konfigurationen verwenden. Ein Ereignis wird gelöscht, wenn eines dieser Limits der Wiederholungsrichtlinie erreicht wird.

  • Maximale Anzahl von Versuchen: Der Wert muss eine ganze Zahl zwischen 1 und 30 sein. Der Standardwert ist 30.
  • TTL des Ereignisses: Der Wert muss eine ganze Zahl zwischen 1 und 1440 sein. Der Standardwert beträgt 1.440 Minuten.

Das folgende Beispiel zeigt das Festlegen der maximalen Anzahl von Versuchen auf 18 mithilfe der Azure CLI.

az eventgrid event-subscription create \
  -g gridResourceGroup \
  --topic-name <topic_name> \
  --name <event_subscription_name> \
  --endpoint <endpoint_URL> \
  --max-delivery-attempts 18

Ausgabebatches

Sie können Event Grid zum Zusammenstellen von Ereignissen für die Übermittlung konfigurieren, um die HTTP-Leistung in Szenarios mit hohen Durchsätzen zu verbessern. Batchverarbeitung ist standardmäßig deaktiviert und kann pro Abonnement über das Portal, die CLI, PowerShell oder SDKs aktiviert werden.

Es gibt zwei Einstellungen für die Batchübermittlung:

  • Maximale Anzahl von Ereignissen pro Batch: Maximale Anzahl der Ereignisse, die Event Grid pro Batch übermittelt. Diese Zahl wird nie überschritten, jedoch können weniger Ereignisse übermittelt werden, wenn keine anderen Ereignisse zum Zeitpunkt der Veröffentlichung verfügbar sind. Event Grid verzögert Ereignisse nicht, um einen Batch zu erstellen, wenn weniger Ereignisse verfügbar sind. Der Wert muss zwischen 1 und 5.000 liegen.

  • Bevorzugte Batchgröße in KB bezeichnet die Obergrenze für die Batchgröße in Kilobyte. Ähnlich wie bei der maximalen Anzahl von Ereignissen kann die Batchgröße kleiner sein, wenn nicht mehr Ereignisse zum Zeitpunkt der Veröffentlichung vorhanden sind. Es ist möglich, dass ein Batch die bevorzugte Batchgröße überschreitet, wenn ein einzelnes Ereignis größer als die bevorzugte Batchgröße ist. Wenn die bevorzugte Größe beispielsweise 4 KB ist und ein Ereignis mit 10 KB an Event Grid gepusht wird, wird das Ereignis mit 10 KB dennoch in einem eigenen Batch übermittelt, anstatt gelöscht zu werden.

Verzögerte Übermittlung

Wenn bei einem Endpunkt Übermittlungsfehler auftreten, beginnt Event Grid, die Übermittlung von Ereignissen an diesen Endpunkt und erneute Versuche zu verzögern. Wenn beispielsweise bei den ersten zehn an einem Endpunkt veröffentlichten Ereignissen Fehler auftreten, geht Event Grid davon aus, dass am Endpunkt Probleme auftreten, und verzögert alle nachfolgenden Wiederholungsversuche und neuen Übermittlungen für einige Zeit – in einigen Fällen bis zu mehreren Stunden.

Der funktionale Zweck der verzögerten Übermittlung besteht darin, sowohl fehlerhafte Endpunkte als auch das Event Grid-System zu schützen. Ohne Backoff und Verzögerung der Übermittlung an fehlerhafte Endpunkte können die Wiederholungsrichtlinie und Volumefunktionen von Event Grid ein System leicht überfordern.

„Unzustellbare Nachrichten“-Ereignisse

Wenn ein Ereignis innerhalb eines bestimmten Zeitraums oder nach einer bestimmten Anzahl von Übermittlungsversuchen nicht übermittelt werden kann, kann Event Grid das nicht übermittelte Ereignis an ein Speicherkonto senden. Dieser Prozess wird als Speicherung unzustellbarer Nachrichten bezeichnet. Von Event Grid werden unzustellbare Nachrichten gespeichert, wenn eine der folgenden Bedingungen erfüllt ist.

  • Das Ereignis wird nicht innerhalb der Gültigkeitsdauer übermittelt.
  • Die Anzahl der Versuche, das Ereignis zu übermitteln, überschreitet den Grenzwert.

Wenn eine der Bedingungen erfüllt ist, wird das Ereignis gelöscht oder als unzustellbare Nachricht gespeichert. Die Speicherung unzustellbarer Nachrichten ist standardmäßig nicht aktiviert. Wenn Sie das Feature aktivieren möchten, müssen Sie bei der Erstellung des Ereignisabonnements ein Speicherkonto zum Speichern nicht übermittelter Ereignisse angeben. Ereignisse werden aus diesem Speicherkonto gepullt, um Übermittlungsprobleme zu beheben.

Wenn Event Grid den Antwortcode 400 (Ungültige Anforderung) oder 413 (Anforderungsentität zu groß) empfängt, wird das Ereignis sofort für die Warteschlange für unzustellbare Nachrichten geplant. Diese Antwortcodes geben an, dass die Übermittlung des Ereignisses nie erfolgreich ausgeführt wird.

Zwischen dem letzten Übermittlungsversuch eines Ereignisses und der Übermittlung an den Speicherort für unzustellbare Nachrichten gibt es eine fünfminütige Verzögerung. Diese Verzögerung dient dazu, die Anzahl der Blob Storage-Vorgänge zu reduzieren. Wenn der Speicherort für unzustellbare Nachrichten vier Stunden lang nicht verfügbar ist, wird das Ereignis gelöscht.

Benutzerdefinierte Übermittlungseigenschaften

Mit Ereignisabonnements können Sie HTTP-Header einrichten, die in übermittelte Ereignisse eingeschlossen werden. Diese Funktion ermöglicht es Ihnen, benutzerdefinierte Header festzulegen, die für ein Ziel erforderlich sind. Beim Erstellen eines Ereignisabonnements können bis zu zehn Header festgelegt werden. Die einzelnen Headerwerte dürfen nicht größer als 4.096 Bytes sein. Sie können benutzerdefinierte Header für die Ereignisse festlegen, die an die folgenden Ziele übermittelt werden:

  • webhooks
  • Azure Service Bus-Themen und -Warteschlangen
  • Azure Event Hubs
  • Relay-Hybridverbindungen

Wenn Sie den Speicherort für unzustellbare Nachrichten festlegen möchten, benötigen Sie ein Speicherkonto mit einem Container. Der Endpunkt für diesen Container wird bei der Erstellung des Ereignisabonnements angegeben.