Concepten van Azure Event Grid-naamruimten

In dit artikel maakt u kennis met de belangrijkste concepten en functionaliteit die zijn gekoppeld aan naamruimteonderwerpen.

gebeurtenis

Een gebeurtenis is de kleinste hoeveelheid informatie die volledig beschrijft wat er in een systeem is gebeurd. We verwijzen vaak naar een gebeurtenis als een discrete gebeurtenis, omdat deze een uniek, zelfstandig feit vertegenwoordigt over een systeem dat een inzicht biedt dat kan worden uitgevoerd. Elke gebeurtenis heeft algemene informatie, zoals source de gebeurtenis, time de gebeurtenis vond plaats en een unieke id. Gebeurtenis heeft ook een type, meestal een unieke id die het soort aankondiging beschrijft waarvoor de gebeurtenis wordt gebruikt.

Een gebeurtenis over het maken van een nieuw bestand in Azure Storage bevat bijvoorbeeld informatie over het bestand, zoals de waarde lastTimeModified. Een Event Hubs-gebeurtenis heeft de URL van het vastgelegde bestand. Een gebeurtenis over een nieuwe order in de microservice Orders kan een orderId kenmerk en een URL-kenmerk hebben voor de statusweergave van de order. Enkele voorbeelden van gebeurtenistypen zijn: com.yourcompany.Orders.OrderCreated, org.yourorg.GeneralLedger.AccountChanged, io.solutionname.Auth.MaximumNumberOfUserLoginAttemptsReached.

Hier volgt een voorbeeldgebeurtenis:

{
    "specversion" : "1.0",
    "type" : "com.yourcompany.order.created",
    "source" : "/orders/account/123",
    "subject" : "O-28964",
    "id" : "A234-1234-1234",
    "time" : "2018-04-05T17:31:00Z",
    "comexampleextension1" : "value",
    "comexampleothervalue" : 5,
    "datacontenttype" : "application/json",
    "data" : {
       "orderId" : "O-28964",
       "URL" : "https://com.yourcompany/orders/O-28964"
    }
}

Een ander soort gebeurtenis

De gebruikerscommunity verwijst ook naar 'gebeurtenissen' naar berichten die een gegevenspunt bevatten, zoals het lezen van één apparaat of een klik op een webpagina van een webtoepassing. Dit soort gebeurtenissen wordt meestal in een tijdvenster geanalyseerd om inzichten af te leiden en een actie uit te voeren. In de documentatie van Event Grid verwijzen we naar dat soort gebeurtenis als een gegevenspunt, streaminggegevens of gewoon als telemetrie. Dit soort gebeurtenissen wordt onder andere gebruikt met de functie Message Queuing Telemetry Transport (MQTT) van Event Grid.

CloudEvents

Event Grid-naamruimteonderwerpen accepteren gebeurtenissen die voldoen aan de Open Standard CloudEvents 1.0-specificatie van CloudEvents (CloudEvents) van De Cloud Native Computing Foundation (CNCF) met behulp van de HTTP-protocolbinding met JSON-indeling. Een CloudEvent is een soort bericht dat bevat wat er wordt gecommuniceerd, aangeduid als gebeurtenisgegevens en metagegevens. De gebeurtenisgegevens in gebeurtenisgestuurde architecturen bevatten doorgaans de informatie die een wijziging van de systeemstatus aankondigt. De metagegevens van CloudEvents bestaan uit een set kenmerken die contextuele informatie bieden over het bericht, zoals waar het afkomstig is (het bronsysteem), het type, enzovoort. Alle geldige berichten die voldoen aan de specificaties van CloudEvents, moeten de volgende vereiste contextkenmerken bevatten:

De CloudEvents-specificatie definieert ook optionele en extensiecontextkenmerken die u kunt opnemen bij het gebruik van Event Grid.

Wanneer u Event Grid gebruikt, is CloudEvents de voorkeursgebeurtenisindeling vanwege de goed gedocumenteerde gebruiksvoorbeelden (modi voor het overdragen van gebeurtenissen, gebeurtenisindelingen, enzovoort), uitbreidbaarheid en verbeterde interoperabiliteit. CloudEvents verbetert de interoperabiliteit door een algemene gebeurtenisindeling te bieden voor het publiceren en gebruiken van gebeurtenissen. Het biedt uniforme tooling en standaard manieren om gebeurtenissen te routeren en te verwerken.

CloudEvents con tentmodus s

De specificatie CloudEvents definieert drie con tentmodus s: binair, gestructureerd en gebatcheerd.

Belangrijk

Met elke con tentmodus kunt u tekst (JSON, text/*, enzovoort) of binaire-gecodeerde gebeurtenisgegevens uitwisselen. De binaire con tentmodus wordt niet uitsluitend gebruikt voor het verzenden van binaire gegevens.

De con tentmodus s gaan niet over de codering die u gebruikt, binair of tekst, maar over hoe de gebeurtenisgegevens en metagegevens worden beschreven en uitgewisseld. De gestructureerde con tentmodus maakt gebruik van één structuur, bijvoorbeeld een JSON-object, waarbij zowel de contextkenmerken als gebeurtenisgegevens zich in de HTTP-nettolading bevinden. De binaire con tentmodus scheidt contextkenmerken, die zijn toegewezen aan HTTP-headers en gebeurtenisgegevens, wat de HTTP-nettolading is gecodeerd volgens het mediatype dat is ingesteld in Content-Type.

CloudEvents-ondersteuning

In deze tabel ziet u de huidige ondersteuning voor CloudEvents-specificatie:

CloudEvents con tentmodus Ondersteund?
Gestructureerde JSON Ja
Gestructureerde JSON-batched Ja, voor het publiceren van gebeurtenissen
Binaire Ja, voor het publiceren van gebeurtenissen

De maximale toegestane grootte voor een gebeurtenis is 1 MB. Gebeurtenissen van meer dan 64 kB worden in rekening gebracht in stappen van 64 kB.

Gestructureerde con tentmodus

Een bericht in CloudEvents structured con tentmodus heeft zowel de contextkenmerken als de gebeurtenisgegevens samen in een HTTP-nettolading.

Belangrijk

Momenteel ondersteunt Event Grid de JSON-indeling CloudEvents met HTTP.

Hier volgt een voorbeeld van een CloudEvents in de gestructureerde modus met behulp van de JSON-indeling. Beide metagegevens (alle kenmerken die geen 'gegevens' zijn) en de bericht-/gebeurtenisgegevens (het 'gegevensobject') worden beschreven met behulp van JSON. Ons voorbeeld bevat alle vereiste contextkenmerken, samen met enkele optionele kenmerken (subject, timeen ) en datacontenttypeextensiekenmerken (comexampleextension1, comexampleothervalue).

{
    "specversion" : "1.0",
    "type" : "com.yourcompany.order.created",
    "source" : "/orders/account/123",
    "subject" : "O-28964",
    "id" : "A234-1234-1234",
    "time" : "2018-04-05T17:31:00Z",
    "comexampleextension1" : "value",
    "comexampleothervalue" : 5,
    "datacontenttype" : "application/json",
    "data" : {
       "orderId" : "O-28964",
       "URL" : "https://com.yourcompany/orders/O-28964"
    }
}

U kunt de JSON-indeling met gestructureerde inhoud gebruiken om gebeurtenisgegevens te verzenden die geen JSON-waarde zijn. Daartoe voert u de volgende stappen uit:

  1. Voeg een datacontenttype kenmerk toe aan het mediatype waarin de gegevens worden gecodeerd.
  2. Als het mediatype is gecodeerd in een tekstindeling zoals text/plain, text/csvof application/xml, moet u een data kenmerk gebruiken met een JSON-tekenreeks die bevat wat u als waarde communiceert.
  3. Als het mediatype een binaire codering vertegenwoordigt, moet u een data_base64 kenmerk gebruiken waarvan de waarde een JSON-tekenreeks is die de binaire waarde base64 bevat.

Deze CloudEvent bevat bijvoorbeeld gebeurtenisgegevens die zijn gecodeerd application/protobuf om Protobuf-berichten uit te wisselen.

{
    "specversion" : "1.0",
    "type" : "com.yourcompany.order.created",
    "source" : "/orders/account/123",
    "id" : "A234-1234-1234",
    "time" : "2018-04-05T17:31:00Z",
    "datacontenttype" : "application/protobuf",
    "data_base64" : "VGhpcyBpcyBub3QgZW5jb2RlZCBpbiBwcm90b2J1ZmYgYnV0IGZvciBpbGx1c3RyYXRpb24gcHVycG9zZXMsIGltYWdpbmUgdGhhdCBpdCBpcyA6KQ=="
}

Zie De verwerking van gegevens voor meer informatie over het gebruik van de data of data_base64 kenmerken.

Zie de specificaties van CloudEvents HTTP structured con tentmodus voor meer informatie over deze con tentmodus.

Batched con tentmodus

Event Grid ondersteunt momenteel de JSON-batched con tentmodus bij het publiceren van CloudEvents naar Event Grid. Deze con tentmodus maakt gebruik van een JSON-matrix die is gevuld met CloudEvents in structured con tentmodus. Uw toepassing kan bijvoorbeeld twee gebeurtenissen publiceren met behulp van een matrix zoals hieronder. Als u ook de SDK voor het gegevensvlak van Event Grid gebruikt, wordt deze nettolading ook verzonden:

[
    {
        "specversion": "1.0",
        "id": "E921-1234-1235",
        "source": "/mycontext",
        "type": "com.example.someeventtype",
        "time": "2018-04-05T17:31:00Z",
        "data": "some data"
    },
    {
        "specversion": "1.0",
        "id": "F555-1234-1235",
        "source": "/mycontext",
        "type": "com.example.someeventtype",
        "time": "2018-04-05T17:31:00Z",
        "data": {
            "somekey" : "value",
            "someOtherKey" : 9
        }
    }
]

Zie CloudEvents Batched Content Mode-specificaties voor meer informatie.

Batching

Uw toepassing moet verschillende gebeurtenissen samenvoegen in een matrix om een grotere efficiëntie en hogere doorvoer te bereiken met één publicatieaanvraag. Batches kunnen maximaal 1 MB zijn en de maximale grootte van een gebeurtenis is 1 MB.

Binaire con tentmodus

Een CloudEvent in binaire con tentmodus heeft de contextkenmerken die worden beschreven als HTTP-headers. De namen van de HTTP-headers zijn de naam van het contextkenmerk met het voorvoegsel ce-. De Content-Type header weerspiegelt het mediatype waarin de gebeurtenisgegevens worden gecodeerd.

Belangrijk

Wanneer u de binaire con gebruikt tentmodus mag de ce-datacontenttype HTTP-header niet ook aanwezig zijn.

Belangrijk

Als u van plan bent om uw eigen kenmerken (d.w.z. extensiekenmerken) op te nemen bij het gebruik van de binaire con tentmodus, moet u ervoor zorgen dat de namen bestaan uit kleine letters ('a' tot 'z') of cijfers ('0' tot '9') van het ASCII-teken en dat ze niet langer zijn dan 20 tekens. Dat wil gezegd, de naamconventie voor het benoemen van contextkenmerken van CloudEvents is meer beperkend dan die van geldige HTTP-headernamen. Niet elke geldige HTTP-headernaam is een geldige naam van het extensiekenmerk.

De HTTP-nettolading is de gebeurtenisgegevens die zijn gecodeerd volgens het mediatype in Content-Type.

Een HTTP-aanvraag die wordt gebruikt voor het publiceren van een CloudEvent in de binaire inhoudsmodus, kan er als volgt uitzien:

POST / HTTP/1.1
HOST mynamespace.eastus-1.eventgrid.azure.net/topics/mytopic
ce-specversion: 1.0
ce-type: com.example.someevent
ce-source: /mycontext
ce-id: A234-1234-1234
ce-time: 2018-04-05T17:31:00Z
ce-comexampleextension1: value
ce-comexampleothervalue: 5
content-type: application/protobuf

Binary data according to protobuf encoding format. No context attributes are included.

Wanneer gebruikt u de binaire of gestructureerde con van CloudEvents tentmodus

U kunt gestructureerde con tentmodus gebruiken als u een eenvoudige benadering wilt voor het doorsturen van CloudEvents tussen hops en protocollen. Omdat een CloudEvent in structured con tentmodus het bericht samen met de metagegevens bevat, is het voor clients eenvoudig om het als geheel te gebruiken en door te sturen naar andere systemen.

U kunt binaire con tentmodus als u weet dat downstreamtoepassingen alleen het bericht vereisen zonder extra informatie (dat wil zeggen de contextkenmerken). Hoewel u met structured con tentmodus de gebeurtenisgegevens (bericht) nog steeds kunt ophalen uit CloudEvent, is het eenvoudiger als een consumententoepassing deze alleen in de HTTP-nettolading heeft. Andere toepassingen kunnen bijvoorbeeld andere protocollen gebruiken en zijn mogelijk alleen geïnteresseerd in uw kernbericht, niet de metagegevens ervan. De metagegevens kunnen zelfs relevant zijn voor de onmiddellijke eerste hop. In dit geval zijn de gegevens die u wilt uitwisselen, afgezien van de metagegevens, geschikt voor eenvoudigere verwerking en doorsturen.

Uitgevers

Een uitgever is de toepassing die gebeurtenissen naar Event Grid verzendt. Dit kan dezelfde toepassing zijn als waar de gebeurtenissen vandaan komen, de gebeurtenisbron. U kunt gebeurtenissen vanuit uw eigen toepassing publiceren wanneer u naamruimteonderwerpen gebruikt.

Gebeurtenisbronnen

Een gebeurtenisbron is waar de gebeurtenis plaatsvindt. Elke gebeurtenisbron ondersteunt een of meer gebeurtenistypen. Uw toepassing is bijvoorbeeld de gebeurtenisbron voor aangepaste gebeurtenissen die door uw systeem worden gedefinieerd. Wanneer u naamruimteonderwerpen gebruikt, zijn de ondersteunde gebeurtenisbronnen uw eigen toepassingen.

Naamruimten

Een Event Grid-naamruimte is een beheercontainer voor de volgende resources:

Bron Protocol ondersteund
Onderwerpen over naamruimten HTTP
Onderwerpruimten MQTT
Clients MQTT
Clientgroepen MQTT
CA-certificaten MQTT
Machtigingsbindingen MQTT

Met een Azure Event Grid-naamruimte kunt u gerelateerde resources groeperen en beheren als één eenheid in uw Azure-abonnement. Hiermee krijgt u een unieke FQDN (Fully Qualified Domain Name).

Een naamruimte bevat twee eindpunten:

  • Een HTTP-eindpunt ter ondersteuning van algemene berichtvereisten met behulp van naamruimteonderwerpen.
  • Een MQTT-eindpunt voor IoT-berichten of -oplossingen die gebruikmaken van MQTT.

Een naamruimte biedt ook DNS-geïntegreerde netwerkeindpunten. Het biedt ook een scala aan functies voor toegangsbeheer en netwerkintegratiebeheer, zoals het filteren van openbare IP-toegangsbeheer en privékoppelingen. Het is ook de container met beheerde identiteiten die worden gebruikt voor ingesloten resources in de naamruimte.

Hier volgen nog enkele punten over naamruimten:

  • Naamruimte is een bijgehouden resource met tags en location eigenschappen, en zodra deze is gemaakt, kunt u deze vinden op resources.azure.com.
  • De naam van de naamruimte mag 3-50 tekens lang zijn. Het kan alfanumerieke en afbreekstreepje(-) en geen spaties bevatten.
  • De naam moet uniek zijn per regio.
  • Huidige ondersteunde regio's: VS - centraal, Azië - oost, VS - oost, VS - oost 2, Europa - noord, VS - zuid-centraal, Azië - zuidoost, VAE - noord, Europa - west, VS - west 2, VS - west 3.

Doorvoereenheden

Doorvoereenheden (TU's) definiëren de capaciteit voor inkomend en uitgaand verkeer in naamruimten. Zie Azure Event Grid-quota en -limieten voor meer informatie.

Onderwerpen

Een onderwerp bevat gebeurtenissen die zijn gepubliceerd naar Event Grid. Doorgaans gebruikt u een onderwerpresource voor een verzameling gerelateerde gebeurtenissen. We hebben vaak verwezen naar onderwerpen in een naamruimte als naamruimteonderwerpen.

Onderwerpen over naamruimten

Naamruimteonderwerpen zijn onderwerpen die worden gemaakt in een Event Grid-naamruimte. Uw toepassing publiceert gebeurtenissen naar een HTTP-naamruimte-eindpunt dat een naamruimteonderwerp opgeeft waarin gepubliceerde gebeurtenissen logisch zijn opgenomen. Bij het ontwerpen van uw toepassing moet u bepalen hoeveel onderwerpen u moet maken. Voor relatief grote oplossingen maakt u een naamruimteonderwerp voor elke categorie gerelateerde gebeurtenissen. Denk bijvoorbeeld aan een toepassing waarmee gebruikersaccounts en een andere toepassing over klantorders worden beheerd. Het is onwaarschijnlijk dat alle gebeurtenisabonnees gebeurtenissen van beide toepassingen willen. Als u problemen wilt scheiden, maakt u twee naamruimteonderwerpen: één voor elke toepassing. Laat gebeurtenisgebruikers zich abonneren op het onderwerp op basis van hun vereisten. Voor kleine oplossingen wilt u mogelijk alle gebeurtenissen naar één onderwerp verzenden.

Naamruimteonderwerpen ondersteunen pull-levering en push-levering. Bekijk wanneer u pull- of pushlevering gebruikt om te bepalen of pull-levering de juiste aanpak is op basis van uw vereisten.

Gebeurtenisabonnementen

Een gebeurtenisabonnement is een configuratieresource die is gekoppeld aan één onderwerp. U gebruikt onder andere een gebeurtenisabonnement om de criteria voor gebeurtenisselectie in te stellen om de gebeurtenisverzameling te definiëren die beschikbaar is voor een abonnee uit de totale set gebeurtenissen die beschikbaar zijn in een onderwerp. U kunt gebeurtenissen filteren op basis van de vereisten van de abonnee. U kunt bijvoorbeeld gebeurtenissen filteren op het gebeurtenistype. U kunt ook filtercriteria definiëren voor eigenschappen van gebeurtenisgegevens als u een JSON-object gebruikt als de waarde voor de gegevenseigenschap . Zoek naar besturingsvlakbewerkingen in de Event Grid REST API voor meer informatie over resource-eigenschappen.

Diagram met een onderwerp en gekoppelde gebeurtenisabonnementen.

Zie Berichten publiceren en gebruiken met behulp van cli voor een voorbeeld van het maken van abonnementen voor naamruimteonderwerpen.

Notitie

De gebeurtenisabonnementen onder een naamruimteonderwerp bevatten een vereenvoudigd resourcemodel in vergelijking met het model dat wordt gebruikt voor aangepaste, domein-, partner- en systeemonderwerpen (Event Grid Basic). Zie Gebeurtenisabonnementen maken, weergeven en beheren voor meer informatie.

Pull-levering

Met pull-bezorging maakt uw toepassing verbinding met Event Grid om berichten te lezen met behulp van semantiek die lijkt op wachtrijen. Wanneer toepassingen verbinding maken met Event Grid om gebeurtenissen te gebruiken, hebben ze de controle over het verbruik van gebeurtenissen en de timing ervan. Consumententoepassingen kunnen ook privé-eindpunten gebruiken wanneer u verbinding maakt met Event Grid om gebeurtenissen te lezen met behulp van privé-IP-ruimte.

Pull-bezorging ondersteunt de volgende bewerkingen voor het lezen van berichten en het beheren van de berichtstatus: ontvangen, bevestigen, vrijgeven, weigeren en vernieuwen. Zie het overzicht van pull-levering voor meer informatie.

Gegevensshape bij het ontvangen van gebeurtenissen met behulp van pull-levering

Bij het leveren van gebeurtenissen met behulp van pull-levering bevat Event Grid een matrix met objecten die op hun beurt de gebeurtenis - en brokerProperties-objecten bevatten. De waarde van de gebeurteniseigenschap is de CloudEvent die wordt geleverd in structured con tentmodus. Het brokerProperties-object bevat het vergrendelingstoken dat is gekoppeld aan de CloudEvent geleverd. Het volgende json-object is een voorbeeldantwoord van een ontvangstbewerking die twee gebeurtenissen retourneert:

{
    "value": [
        {
            "brokerProperties": {
                "lockToken": "CiYKJDUwNjE4QTFFLUNDODQtNDZBQy1BN0Y4LUE5QkE3NjEwNzQxMxISChDXYS23Z+5Hq754VqQjxywE",
                "deliveryCount": 2
            },
            "event": {
                "specversion": "1.0",
                "id": "A234-1234-1235",
                "source": "/mycontext",
                "time": "2018-04-05T17:31:00Z",
                "type": "com.example.someeventtype",
                "data": "some data"
            }
        },
        {
            "brokerProperties": {
                "lockToken": "CiYKJDUwNjE4QTFFLUNDODQtNDZBQy1BN0Y4LUE5QkE3NjEwNzQxMxISChDLeaL+nRJLNq3/5NXd/T0b",
                "deliveryCount": 1
            },
            "event": {
                "specversion": "1.0",
                "id": "B688-1234-1235",
                "source": "/mycontext",
                "type": "com.example.someeventtype",
                "time": "2018-04-05T17:31:00Z",
                "data": {
                    "somekey" : "value",
                    "someOtherKey" : 9
                }
            }
        }
    ]
}

Push-levering

Met pushlevering verzendt Event Grid gebeurtenissen naar een bestemming die is geconfigureerd in een push-gebeurtenisabonnement (leveringsmodus in). Het biedt een robuuste logica voor opnieuw proberen voor het geval de bestemming geen gebeurtenissen kan ontvangen.

Belangrijk

De pushlevering van Event Grid-naamruimten ondersteunt momenteel Azure Event Hubs als bestemming. In de toekomst ondersteunen Event Grid-naamruimten meer bestemmingen, inclusief alle bestemmingen die worden ondersteund door Event Grid Basic.

Event Hubs-gebeurtenislevering

Event Grid maakt gebruik van de Event Hubs SDK voor het verzenden van gebeurtenissen naar Event Hubs met behulp van AMQP. Gebeurtenissen worden verzonden als een bytematrix met elk element in de matrix met een CloudEvent.

Push- en pull-levering

Event Grid ondersteunt de levering van push- en pull-gebeurtenissen met behulp van HTTP. Met pushlevering definieert u een bestemming in een gebeurtenisabonnement, een webhook of een Azure-service waarnaar Event Grid gebeurtenissen verzendt. Met pull-levering maken abonneetoepassingen verbinding met Event Grid om gebeurtenissen te verbruiken. Pull-levering wordt ondersteund voor onderwerpen in een Event Grid-naamruimte.

Belangrijk

Event Hubs wordt ondersteund als bestemming voor abonnementen op naamruimteonderwerpen. In de komende releases ondersteunen Event Grid-naamruimten alle bestemmingen die momenteel beschikbaar zijn in Event Grid Basic, samen met extra bestemmingen.

Diagram op hoog niveau met pushlevering en pull-levering met het type betrokken resources.

Wanneer gebruikt u pushlevering versus pull-levering

Hier volgen algemene richtlijnen om u te helpen bepalen wanneer u pull- of pushlevering wilt gebruiken.

Pull-levering

  • U hebt volledige controle nodig over wanneer gebeurtenissen moeten worden ontvangen. Uw toepassing is bijvoorbeeld mogelijk niet altijd up-the-time, niet stabiel genoeg of u verwerkt gegevens op bepaalde momenten.
  • U hebt volledige controle nodig over het verbruik van gebeurtenissen. Een downstreamservice of laag in uw consumententoepassing heeft bijvoorbeeld een probleem waardoor u geen gebeurtenissen kunt verwerken. In dat geval kan de pull-leverings-API de consumenten-app een al lees-gebeurtenis vrijgeven aan de broker, zodat deze later kan worden geleverd.
  • U wilt privékoppelingen gebruiken bij het ontvangen van gebeurtenissen, wat alleen mogelijk is met de pull-levering, niet de push-levering.
  • U hebt niet de mogelijkheid om een eindpunt beschikbaar te maken en pushlevering te gebruiken, maar u kunt wel verbinding maken met Event Grid om gebeurtenissen te gebruiken.

Push-levering

  • U wilt constante polling voorkomen om te bepalen dat er een wijziging in de systeemstatus is opgetreden. U gebruikt Event Grid liever om gebeurtenissen naar u te verzenden op het moment dat de statuswijzigingen plaatsvinden.
  • U hebt een toepassing die geen uitgaande oproepen kan uitvoeren. Uw organisatie kan zich bijvoorbeeld zorgen maken over gegevensexfiltratie. Uw toepassing kan echter gebeurtenissen ontvangen via een openbaar eindpunt.

Volgende stappen