Auswählen von Azure Event Grid

Abgeschlossen

Viele Anwendungen nutzen das Veröffentlichen/Abonnieren-Modell, um verteilte Komponenten zu informieren, wenn ein Problem aufgetreten ist oder ein Objekt geändert wurde. Angenommen, Sie verfügen über eine Anwendung für den Austausch von Musik mit einer Web-API, die in Azure ausgeführt wird. Wenn ein Benutzer einen neuen Song hochlädt, müssen Sie weltweit alle auf Endgeräten installierten mobilen Apps benachrichtigen, die Benutzern gehören, die an dem Genre interessiert sind, dem der Song angehört.

In dieser Architektur benötigt der Herausgeber der Audiodatei keine Informationen über die Abonnenten, die an der geteilten Musik interessiert sind. Darüber hinaus soll es eine 1:n-Beziehung mit mehreren Abonnenten geben, die entscheiden können, ob sie an diesem neuen Song interessiert sind. Azure Event Grid eignet sich hervorragend für derartige Architekturen.

Was ist Azure Event Grid?

Azure Event Grid ist ein vollständig verwalteter Ereignisroutingdienst, der auf Azure Service Fabric aufsetzt. Event Grid verteilt Ereignisse aus verschiedenen Quellen wie Azure Blob Storage-Konten oder Azure Media Services an verschiedene Abonnenten wie Azure Functions oder Webhooks. Event Grid wurde erstellt, um das Erstellen von ereignisbasierten und serverlosen Anwendungen in Azure zu vereinfachen.

Event Grid unterstützt die meisten Azure-Dienste und sogar Drittanbieterdienste als Herausgeber oder Abonnent. Event Grid umfasst ein dynamisch skalierbares, kostengünstiges Nachrichtensystem, mit dem Herausgeber Abonnenten über Statusänderungen benachrichtigen können. Die folgende Abbildung zeigt, wie Azure Event Grid Nachrichten von verschiedenen Quellen empfängt und basierend auf dem Abonnement an Ereignishandler verteilt.

Es gibt verschiedene Konzepte in Azure Event Grid, wie eine Verbindung zwischen einer Quelle und einem Abonnenten hergestellt werden kann:

  • Ereignisse: Was ist passiert?
  • Ereignisquellen: Wo hat das Ereignis stattgefunden?
  • Themen: Der Endpunkt, an den Herausgeber Ereignisse senden.
  • Ereignisabonnements: Der Endpunkt oder integrierte Mechanismus zum Weiterleiten von Ereignissen – manchmal teilweise an mehrere Handler. Handler verwenden Abonnements auch, um eingehende Ereignisse auf intelligente Weise zu filtern.
  • Ereignishandler: Die App oder der Dienst, die/der auf das Ereignis reagiert.

Die folgende Abbildung zeigt ein Azure Event Grid-Element, das zwischen mehreren Ereignisquellen und mehreren Ereignishandlern positioniert ist. Die Ereignisquellen senden Ereignisse an Event Grid, und Event Grid leitet die relevanten Ereignisse an die Abonnenten weiter. Event Grid verwendet Themen, um zu entscheiden, welche Ereignisse an welche Handler gesendet werden sollen. Ereignisquellen kennzeichnen jedes Ereignis mit mindestens einem Thema, und Ereignishandler abonnieren die Themen, an denen sie interessiert sind.

Diagram of various event sources sending messages as topics to the Event Grid which in turn sends messages to subscribing event handlers.

Was ist ein Ereignis?

Ereignisse sind Datennachrichten, die über Event Grid übertragen werden und Informationen über Vorkommnisse enthalten. Jedes Ereignis ist eigenständig, kann bis zu 64 KB umfassen und enthält mehrere Informationen, die auf einem von Event Grid definierten Schema basieren:

[
  {
    "topic": string,
    "subject": string,
    "id": string,
    "eventType": string,
    "eventTime": string,
    "data":{
      object-unique-to-each-publisher
    },
    "dataVersion": string,
    "metadataVersion": string
  }
]
Feld Beschreibung
topic Der vollständige Ressourcenpfad zu der Ereignisquelle. Dieser Wert wird von Event Grid bereitgestellt.
subject Vom Herausgeber definierter Pfad zum Ereignisbetreff.
id Der eindeutige Bezeichner eines Ereignisses.
eventType Einer der für diese Ereignisquelle registrierten Ereignistypen. Sie können Filter für diesen Wert erstellen, z. B. CustomerCreated, BlobDeleted, HttpRequestReceived, usw.
eventTime Die Zeit, in der das Ereignis generiert wird, basierend auf der UTC-Zeit des Anbieters.
data Informationen, die sich auf den Ereignistypen beziehen. Beispielsweise enthält ein Ereignis zu einer neuen Datei, die in Azure Storage erstellt wird, Details zur Datei, z. B. den lastTimeModified-Wert. Alternativ dazu enthält ein Event Hubs-Ereignis die URL der Erfassungsdatei. Dieses Feld ist optional.
dataVersion Die Schemaversion des Datenobjekts. Der Herausgeber definiert die Schemaversion.
metadataVersion Die Schemaversion der Ereignismetadaten. Event Grid definiert das Schema der Eigenschaften der obersten Ebene. Dieser Wert wird von Event Grid bereitgestellt.

Tipp

Event Grid sendet ein Ereignis, wenn etwas passiert oder Änderungen vorgenommen wurden. Das eigentliche Objekt, an dem eine Änderung vorgenommen wurde, ist dabei allerdings nicht Bestandteil der Ereignisdaten. Stattdessen wird häufig eine URL oder ein Bezeichner übergeben, um auf das geänderte Objekt zu verweisen.

Was ist eine Ereignisquelle?

Ereignisquellen sind dafür zuständig, Ereignisse an Event Grid zu senden. Jede Ereignisquelle ist mit mindestens einem Ereignistyp verknüpft. Azure Storage ist z.B. die Ereignisquelle für durch Blobs erstellte Ereignisse. IoT Hub ist die Ereignisquelle für Ereignisse, die von Geräten erstellt wurden. Ihre Anwendung ist die Ereignisquelle für benutzerdefinierte Ereignisse, die Sie definieren. Später erhalten Sie noch einen detaillierteren Überblick über Ereignisquellen.

Azure Event Grid folgt dem Konzept eines Ereignisherausgebers, das oft mit dem der Ereignisquelle verwechselt wird. Ein Ereignisherausgeber ist der Benutzer oder die Organisation, der bzw. die Ereignisse an Event Grid sendet. Microsoft veröffentlicht beispielsweise Ereignisse für mehrere Azure-Dienste. Sie haben die Möglichkeit, Ereignisse über Ihre eigene Anwendung zu veröffentlichen. Organisationen, die Dienste außerhalb von Azure hosten, können Ereignisse über Event Grid veröffentlichen. Die Ereignisquelle ist der Dienst, der das Ereignis für diesen Herausgeber generiert. Obwohl die beiden Begriffe sich geringfügig unterscheiden, werden wir in dieser Einheit „Herausgeber“ und „Ereignisquelle“ synonym verwenden, um die Entität zu bezeichnen, die die Nachricht an Event Grid sendet.

Was ist eine Ereignisthema?

Ereignisthemen kategorisieren Ereignisse in Gruppen. Themen werden von einem öffentlichen Endpunkt dargestellt und sind das Ziel von Ereignissen, die von der Ereignisquelle gesendet werden. Sie können beim Entwerfen Ihrer Anwendung entscheiden, wie viele Themen erstellt werden sollen. Größere Lösungen erstellen für jede Kategorie von verknüpften Ereignissen ein benutzerdefiniertes Thema, während kleinere Lösungen ggf. sämtliche Ereignisse an nur ein Thema senden. Denken Sie beispielsweise an eine Anwendung, die Ereignisse im Zusammenhang mit der Änderung von Benutzerkonten und der Verarbeitung von Bestellungen sendet. Es ist unwahrscheinlich, dass ein Ereignishandler beide Ereigniskategorien benötigt. Erstellen Sie zwei benutzerdefinierte Themen, und lassen Sie die Ereignishandler das jeweils für sie relevante Thema abonnieren. Ereignisabonnenten können nach den gewünschten Ereignistypen eines bestimmten Themas filtern.

Themen werden in Systemthemen und benutzerdefinierte Themen gegliedert.

Systemthemen

Systemthemen sind integrierte Themen, die von Azure-Diensten bereitgestellt werden. Es werden keine Systemthemen in Ihrem Azure-Abonnement angezeigt, weil diese dem Herausgeber gehören. Allerdings haben Sie die Möglichkeit, sie zu abonnieren. Geben Sie zum Abonnieren Informationen zu der Ressource an, aus der Sie Ereignisse empfangen möchten. Solange Sie Zugriff auf eine Ressource haben, können Sie auch ihre Ereignisse abonnieren.

Benutzerdefinierte Themen

Benutzerdefinierte Themen sind Anwendungs- und Drittanbieterthemen. Wenn Sie ein benutzerdefiniertes Thema erstellen oder Zugriff darauf erhalten, wird dieses in Ihrem Abonnement angezeigt.

Was ist ein Ereignisabonnement?

Ereignisabonnements definieren, welche Ereignisse zu einem Thema der Ereignishandler empfangen soll. Ein Abonnement kann Ereignisse auch anhand ihres Typs oder Betreffs filtern, sodass Sie sicherstellen können, dass ein Ereignishandler nur relevante Ereignisse empfängt.

Was ist eine Ereignishandler?

Ein Ereignishandler (teilweise auch als „Ereignisabonnent“ bezeichnet) ist eine beliebige Komponente (eine Anwendung oder eine Ressource), die Ereignisse von Event Grid empfangen kann. Azure Functions kann z.B. Code ausführen, wenn dem Blob Storage-Konto ein neuer Song hinzugefügt wird. Abonnenten können sich entscheiden, welche Ereignisse sie verarbeiten möchten, und Event Grid benachrichtigt jeden interessierten Abonnenten, wenn ein neues Ereignis verfügbar ist, ohne dass ein Abruf notwendig ist.

Arten von Ereignisquellen

Die folgenden Azure-Ressourcentypen können Ereignisse generieren:

Systemthemen unterstützende Azure-Dienste

Hier folgen einige Azure-Dienste, die Systemthemen unterstützen. Eine vollständige Liste der Azure-Dienste, die Systemthemen unterstützen, finden Sie unter Systemthemen in Azure Event Grid.

  • Azure-Abonnements und -Ressourcengruppen: Abonnements und Ressourcengruppen generieren Ereignisse im Zusammenhang mit Verwaltungsvorgängen in Azure. Wenn z.B. ein Benutzer einen virtuellen Computer erstellt, generiert diese Quelle ein Ereignis.
  • Containerregistrierung: Azure Container Registry ist ein Dienst, der Ereignisse generiert, wenn Images der Registrierung hinzugefügt, aus ihr entfernt oder in ihr geändert werden.
  • Event Hubs: Event Hubs kann verwendet werden, um Ereignisse aus verschiedenen Datenquellen – üblicherweise Protokollierung oder Telemetrie – zu verarbeiten und zu speichern. Event Hubs kann Ereignisse für Event Grid erstellen, wenn Dateien erfasst werden.
  • Service Bus: Service Bus kann Ereignisse für Event Grid generieren, wenn aktive Nachrichten ohne aktive Listener vorhanden sind.
  • Storage-Konten: Storage-Konten können Ereignisse generieren, wenn Benutzer*innen Blobs, Dateien, Tabelleneinträge oder Warteschlangennachrichten hinzufügen. Sie können sowohl Blobkonten als auch universelle V2-Konten als Ereignisquellen verwenden.
  • Media Services: Media Services hostet Video- und Audiomedien und bietet erweiterte Verwaltungsfeatures für Mediendateien. Diese Plattform kann Ereignisse generieren, wenn ein Codierungsauftrag für eine Videodatei gestartet oder abgeschlossen wird.
  • Azure IoT Hub: IoT Hub kommuniziert mit IoT-Geräten und ruft Telemetriedaten von diesen ab. Der Dienst kann Ereignisse generieren, wenn diese Nachrichten eingehen.

Weitere Informationen finden Sie unter Systemthemen in Azure Event Grid.

Benutzerdefinierte Themen

Sie können benutzerdefinierte Ereignisse mit der REST-API oder dem Azure SDK in Java, GO, .NET, Node, Python und Ruby generieren. Sie können z.B. ein benutzerdefiniertes Ereignis im Web-Apps-Feature von Azure App Service erstellen. Das kann in der Workerrolle passieren, wenn sie eine Nachricht aus einer Speicherwarteschlange abfängt.

Diese umfassende Integration in verschiedene Ereignisquellen innerhalb von Azure stellt sicher, dass Event Grid Ereignisse verteilen kann, die sich auf nahezu alle Azure-Ressourcen beziehen.

Ereignishandler

Die folgenden Objekttypen in Azure können Ereignisse von Event Grid empfangen und verarbeiten:

  • Azure Functions: Benutzerdefinierter Code wird in Azure ausgeführt, ohne dass die explizite Konfiguration eines virtuellen Hostservers oder Containers erforderlich ist. Verwenden Sie eine Azure-Funktion als Ereignishandler, wenn Sie eine benutzerdefinierte Antwort auf das Ereignis programmieren möchten.
  • Azure Logic Apps: Verwenden Sie Logic Apps, um Geschäftsprozesse zum Verarbeiten von Event Grid Ereignissen zu implementieren. In diesem Szenario erstellen Sie nicht explizit einen Webhook. Der Webhook wird automatisch für Sie erstellt, wenn Sie die Logik-App für die Behandlung von Ereignissen aus Event Grid konfigurieren.
  • Webhooks: Ein Webhook ist eine Web-API, die eine Pusharchitektur implementiert. Sie können Ereignisse auch mit Azure Automation-Runbooks verarbeiten. Webhooks unterstützen die Verarbeitung von Ereignissen mithilfe automatisierter Runbooks. Sie erstellen einen Webhook für das Runbook und verwenden dann den Webhookhandler.
  • Event Hubs: Verwenden Sie Event Hubs, wenn Ihre Lösung Ereignisse aus Event Grid schneller abrufen kann, als die Ereignisse verarbeitet werden. Sobald sich die Ereignisse in einem Event Hub befinden, kann Ihre Anwendung Ereignisse aus dem Event Hub gemäß einem eigenen Zeitplan verarbeiten.
  • Service Bus: Sie können eine Dienstwarteschlange oder ein Thema als Handler für Ereignisse aus Event Grid verwenden.
  • Storage Warteschlangen: Verwenden Sie Queue Storage, um Ereignisse zu empfangen, die abgerufen werden müssen. Bei einem Prozess mit langer Ausführungszeit und zu langer Antwortdauer können Sie Queue Storage verwenden. Wenn die Ereignisse an Queue Storage gesendet werden, kann die App Ereignisse nach einem eigenen Zeitplan pullen und verarbeiten.
  • Microsoft Power Automate: Power Automate hostet ebenfalls Workflows, ist jedoch von nichttechnischen Mitarbeiter*innen einfacher zu verwenden.

Weitere Informationen finden Sie unter Ereignishandler.

Gründe für das Verwenden von Event Grid

Verwenden Sie Event Grid, wenn Sie folgende Eigenschaften benötigen:

  • Einfachheit: In Event Grid ist es sehr einfach, Quellen mit Abonnenten zu verbinden.
  • Erweitertes Filtern: Abonnements bieten eine genaue Steuerung der Ereignisse, die sie von einem Thema empfangen.
  • Auffächern: Sie können für die gleichen Ereignisse und Themen eine unbegrenzte Anzahl von Endpunkten abonnieren.
  • Zuverlässigkeit: Event Grid versucht die Ereignisübermittlung für jedes Abonnement für bis zu 24 Stunden erneut.
  • Zahlung pro Ereignis: Sie zahlen nur für die Anzahl der Ereignisse, die Sie übertragen.

Event Grid ist ein einfaches, aber vielseitiges Ereignisverteilungssystem. Verwenden Sie es, um diskrete Ereignisse für Abonnenten zu versenden, die diese Ereignisse zuverlässig und schnell empfangen. Es gibt noch ein weiteres Nachrichtenmodell, das wir uns jetzt ansehen: Was ist zu tun, wenn ein umfangreicher Ereignisstream übermittelt werden soll? In diesem Szenario eignet sich Event Grid nicht besonders gut, weil es zu einem Zeitpunkt nur ein Ereignis übermitteln kann. Aber hier eignet sich ein anderer Azure-Dienst: Event Hubs.