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
Gebruik de Bash-omgeving in Azure Cloud Shell. Zie quickstart voor Bash in Azure Cloud Shell voor meer informatie.
Installeer de Azure CLI, indien gewenst, om CLI-referentieopdrachten uit te voeren. Als u in Windows of macOS werkt, kunt u Azure CLI uitvoeren in een Docker-container. Zie De Azure CLI uitvoeren in een Docker-container voor meer informatie.
Als u een lokale installatie gebruikt, meldt u zich aan bij Azure CLI met behulp van de opdracht az login. Volg de stappen die worden weergegeven in de terminal, om het verificatieproces te voltooien. Raadpleeg Aanmelden bij Azure CLI voor aanvullende aanmeldingsopties.
Installeer de Azure CLI-extensie bij het eerste gebruik, wanneer u hierom wordt gevraagd. Raadpleeg Extensies gebruiken met Azure CLI voor meer informatie over extensies.
Voer az version uit om de geïnstalleerde versie en afhankelijke bibliotheken te vinden. Voer az upgrade uit om te upgraden naar de nieuwste versie.
- 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.
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>"
Maak een resourcegroep. Wijzig de locatie naar wens.
az group create --name $resource_group --location eastus
De Event Grid-resourceprovider inschakelen
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
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
registrationState
Registered
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
ofEventGrid
.
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>"
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.
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>"
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.
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>"
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
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)
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
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
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.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.
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
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.
In de vorige stap moet u een antwoord hebben ontvangen dat een
brokerProperties
object met eenlockToken
eigenschap bevat. Kopieer de waarde van het vergrendelingstoken en stel deze in op een omgevingsvariabele:lockToken="<paste-the-lock-token-here>"
Bouw nu de nettolading voor de bevestigingsbewerking, waarmee het vergrendelingstoken wordt opgegeven voor de gebeurtenis die u wilt bevestigen.
acknowledge_request_payload=' { "lockTokens": ["'$lockToken'"]} '
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
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.