Publiceren naar onderwerpen over naamruimten en gebeurtenissen gebruiken in Azure Event Grid

Dit artikel bevat een korte inleiding tot pull-levering met behulp van de curl bash-shell-opdracht voor het publiceren, ontvangen en bevestigen van gebeurtenissen. Event Grid-resources worden gemaakt met CLI-opdrachten. Dit artikel is geschikt voor een snelle test van de functionaliteit voor pull-levering. Zie .NET of de Java-voorbeelden voor voorbeeldcode met behulp van de SDK's voor het gegevensvlak. Voor Java bieden we de voorbeeldcode in twee artikelen: gebeurtenissen publiceren en quickstarts voor gebeurtenissen ontvangen. Zie de concepten en artikelen over het pull-leveringsoverzicht voor meer informatie over het pull-leveringsmodel.

Als u geen Azure-abonnement hebt, kunt u een gratis Azure-account maken voordat u begint.

Vereisten

  • Voor dit artikel is versie 2.0.70 of hoger van Azure CLI vereist. Als u Azure Cloud Shell gebruikt, is de nieuwste versie al geïnstalleerd.

Een brongroep maken

Maak een Azure-resourcegroep met de opdracht az group create. U gebruikt deze resourcegroep om alle resources te bevatten die in dit artikel zijn gemaakt.

De algemene stappen voor het gebruik van Cloud Shell voor het uitvoeren van opdrachten zijn:

  • Selecteer Cloud Shell openen om een Azure Cloud Shell-venster in het rechterdeelvenster weer te geven.
  • Kopieer de opdracht en plak deze in het Azure Cloud Shell-venster.
  • Druk op ENTER de opdracht uit te voeren.
  1. Declareer een variabele voor het opslaan van de naam van een Azure-resourcegroep. Geef een naam op voor de resourcegroep door deze te vervangen door <your-resource-group-name> een waarde die u leuk vindt.

    resource_group="<your-resource-group-name>"
    
  2. Maak een resourcegroep. Wijzig de locatie naar wens.

    az group create --name $resource_group --location eastus
    

De Event Grid-resourceprovider inschakelen

  1. Als u Event Grid in uw Azure-abonnement nog niet eerder hebt gebruikt, moet u mogelijk de Event Grid-resourceprovider registreren. Voer de volgende opdracht uit om de provider te registreren:

    az provider register --namespace Microsoft.EventGrid
    
  2. Het kan even duren voordat de registratie is voltooid. Voer de volgende opdracht uit om de status te controleren:

    az provider show --namespace Microsoft.EventGrid --query "registrationState"
    

    Wanneer registrationStateRegistered is, bent u klaar om door te gaan.

Een naamruimte maken

Een Event Grid-naamruimte biedt een door de gebruiker gedefinieerd eindpunt waarnaar u uw gebeurtenissen plaatst. In het volgende voorbeeld wordt een naamruimte in uw resourcegroep gemaakt met behulp van Bash in Azure Cloud Shell. De naamruimtenaam moet uniek zijn omdat deze deel uitmaakt van een DNS-vermelding (Domain Name System). Een naamruimtenaam moet voldoen aan de volgende regels:

  • Het moet tussen de 3 en 50 tekens zijn.
  • Het moet regionaal uniek zijn.
  • Alleen toegestane tekens zijn a-z, A-Z, 0-9 en -
  • Het mag niet beginnen met gereserveerde voorvoegsels voor sleutelwoorden zoals Microsoft, System of EventGrid.
  1. Declareer een variabele om de naam voor uw Event Grid-naamruimte op te slaan. Geef een naam op voor de naamruimte door deze te vervangen door <your-namespace-name> een waarde die u leuk vindt.

    namespace="<your-namespace-name>"
    
  2. Een naamruimte maken. Mogelijk wilt u de locatie wijzigen waar deze is geïmplementeerd.

    az eventgrid namespace create -g $resource_group -n $namespace -l eastus
    

Een naamruimteonderwerp maken

Maak een onderwerp dat wordt gebruikt voor het opslaan van alle gebeurtenissen die zijn gepubliceerd naar het naamruimte-eindpunt.

  1. Declareer een variabele om de naam voor uw naamruimteonderwerp op te slaan. Geef een naam op voor het onderwerp van de naamruimte door deze te vervangen door <your-topic-name> een waarde die u leuk vindt.

    topic="<your-topic-name>"
    
  2. Uw naamruimteonderwerp maken:

    az eventgrid namespace topic create -g $resource_group -n $topic --namespace-name $namespace 
    

Een gebeurtenisabonnement maken

Maak een gebeurtenisabonnement dat de leveringsmodus instelt op wachtrij, die pull-levering ondersteunt. Zie de meest recente REST API voor Event Grid-besturingsvlak voor meer informatie over alle configuratieopties.

  1. Declareer een variabele voor het opslaan van de naam voor een gebeurtenisabonnement in uw naamruimteonderwerp. Geef een naam op voor het gebeurtenisabonnement door een waarde te vervangen <your-event-subscription-name> die u wilt.

    event_subscription="<your-event-subscription-name>"
    
  2. Maak een gebeurtenisabonnement op het onderwerp van de naamruimte:

    az eventgrid namespace topic event-subscription create -g $resource_group --topic-name $topic -n $event_subscription --namespace-name $namespace --delivery-configuration "{deliveryMode:Queue,queue:{receiveLockDurationInSeconds:300,maxDeliveryCount:4,eventTimeToLive:P1D}}"
    

Gebeurtenissen verzenden naar uw onderwerp

Verzend nu een voorbeeldgebeurtenis naar het onderwerp van de naamruimte door de stappen in deze sectie te volgen.

Toegangssleutels voor naamruimte weergeven

  1. Haal de toegangssleutels op die zijn gekoppeld aan de naamruimte die u hebt gemaakt. U gebruikt een van deze items om te verifiëren bij het publiceren van gebeurtenissen. Als u uw sleutels wilt weergeven, hebt u eerst de volledige resource-id van de naamruimte nodig. Haal deze op door de volgende opdracht uit te voeren:

    namespace_resource_id=$(az eventgrid namespace show -g $resource_group -n $namespace --query "id" --output tsv)
    
  2. Haal de eerste sleutel op uit de naamruimte:

    key=$(az eventgrid namespace list-key -g $resource_group --namespace-name $namespace --query "key1" --output tsv)
    

Een gebeurtenis publiceren

  1. Haal de hostnaam van de naamruimte op. U gebruikt deze om het HTTP-eindpunt voor de naamruimte op te stellen waarnaar gebeurtenissen worden verzonden. De volgende bewerkingen waren voor het eerst beschikbaar met api-versie 2023-06-01-preview.

    publish_operation_uri="https://"$(az eventgrid namespace show -g $resource_group -n $namespace --query "topicsConfiguration.hostname" --output tsv)"/topics/"$topic:publish?api-version=2023-06-01-preview
    
  2. Maak een voorbeeldgebeurtenis die compatibel is met CloudEvents :

    event=' { "specversion": "1.0", "id": "'"$RANDOM"'", "type": "com.yourcompany.order.ordercreatedV2", "source" : "/mycontext", "subject": "orders/O-234595", "time": "'`date +%Y-%m-%dT%H:%M:%SZ`'", "datacontenttype" : "application/json", "data":{ "orderId": "O-234595", "url": "https://yourcompany.com/orders/o-234595"}} '
    

    Het data element is de nettolading van uw gebeurtenis. Elke juist opgemaakte JSON kan in dit veld worden ingevoerd. Zie de specificaties van CloudEvents voor meer informatie over eigenschappen (ook wel contextkenmerken genoemd) die in een gebeurtenis kunnen worden gebruikt.

  3. Gebruik CURL om de gebeurtenis naar het onderwerp te verzenden. CURL is een hulpprogramma waarmee HTTP-aanvragen worden verzonden.

    curl -X POST -H "Content-Type: application/cloudevents+json" -H "Authorization:SharedAccessKey $key" -d "$event" $publish_operation_uri
    

De gebeurtenis ontvangen

U ontvangt gebeurtenissen van Event Grid met behulp van een eindpunt dat verwijst naar een gebeurtenisabonnement.

  1. Stel dat eindpunt op door de volgende opdracht uit te voeren:

    receive_operation_uri="https://"$(az eventgrid namespace show -g $resource_group -n $namespace --query "topicsConfiguration.hostname" --output tsv)"/topics/"$topic/eventsubscriptions/$event_subscription:receive?api-version=2023-06-01-preview
    
  2. Dien een aanvraag in om de gebeurtenis te gebruiken:

    curl -X POST -H "Content-Type: application/json" -H "Authorization:SharedAccessKey $key" $receive_operation_uri
    

Een gebeurtenis bevestigen

Nadat u een gebeurtenis hebt ontvangen, geeft u deze gebeurtenis door aan uw toepassing voor verwerking. Zodra u uw gebeurtenis hebt verwerkt, hebt u deze gebeurtenis niet meer nodig in uw gebeurtenisabonnement. Als u Event Grid wilt instrueren om de gebeurtenis te verwijderen, bevestigt u deze met behulp van het vergrendelingstoken dat u hebt ontvangen in het antwoord van de ontvangstbewerking.

  1. In de vorige stap moet u een antwoord hebben ontvangen dat een brokerProperties object met een lockToken eigenschap bevat. Kopieer de waarde van het vergrendelingstoken en stel deze in op een omgevingsvariabele:

    lockToken="<paste-the-lock-token-here>"
    
  2. Bouw nu de nettolading voor de bevestigingsbewerking, waarmee het vergrendelingstoken wordt opgegeven voor de gebeurtenis die u wilt bevestigen.

    acknowledge_request_payload=' { "lockTokens": ["'$lockToken'"]} '
    
  3. Ga verder met het bouwen van de tekenreeks met de URI voor de bevestigingsbewerking:

    acknowledge_operation_uri="https://"$(az eventgrid namespace show -g $resource_group -n $namespace --query "topicsConfiguration.hostname" --output tsv)"/topics/"$topic/eventsubscriptions/$event_subscription:acknowledge?api-version=2023-06-01-preview
    
  4. Dien ten slotte een aanvraag in om de ontvangen gebeurtenis te bevestigen:

    curl -X POST -H "Content-Type: application/json" -H "Authorization:SharedAccessKey $key" -d "$acknowledge_request_payload" $acknowledge_operation_uri
    

    Als de bevestigingsbewerking wordt uitgevoerd voordat het vergrendelingstoken verloopt (300 seconden zoals ingesteld bij het maken van het gebeurtenisabonnement), ziet u een antwoord zoals in het volgende voorbeeld:

    {"succeededLockTokens":["CiYKJDQ4NjY5MDEyLTk1OTAtNDdENS1BODdCLUYyMDczNTYxNjcyMxISChDZae43pMpE8J8ovYMSQBZS"],"failedLockTokens":[]}
    

Volgende stappen

Zie het overzicht van pull-levering voor meer informatie over het pull-leveringsmodel.