eventgrid schemas deliovery durability control access to events receive events by using webhooks filter events
Registering a provider:
az provider register --namespace Microsoft.EventGrid
(then progress can be monitored using az provider show -n Microsoft.EventGrid
The code below will setup eventgrid + create ARM-based webapp that gets the events. Example event to be send:
[
{
"id": "2601",
"eventType": "recordInserted",
"subject": "myapp/vehicles/motorcycles",
"eventTime": "2023-06-01T04:40:46+0200",
"data": {
"make": "Contoso",
"model": "Monster"
},
"dataVersion": "1.0"
}
]
GIST source: https://gist.github.com/wkaczurba/e9940d689e6a764c56777e31c1b77211
#!/bin/bash
# Login if not created:
#az login
RANDOM_SUFFIX="4def88"
RESOURCE_GROUP=eventgrid-demo-${RANDOM_SUFFIX}-rg
MY_LOCATION=westeurope
MY_TOPIC_NAME=eg-topic-${RANDOM_SUFFIX}
MY_SITE_NAME=eg-site-${RANDOM_SUFFIX}
MY_SITE_URL="https://${MY_SITE_NAME}.azurewebsites.net"
if [ $(az group exists --name $RESOURCE_GROUP) = false ]; then
echo Creating resource group $RESOURCE_GROUP:
az group create --resource-group $RESOURCE_GROUP --location $MY_LOCATION
else
echo Resource group $RESOURCE_GROUP exists. Not creating.
fi
# Enabling eventgrid resource provider
# NOTE: Needed only on subscription w/o Microosft.EventGrid enabled - go in portal: subscription -> resource-providers
az provider register --namespace Microsoft.EventGrid
# Creating a custom topic.
az eventgrid topic create --name $MY_TOPIC_NAME --location $MY_LOCATION --resource-group $RESOURCE_GROUP
# Creating a webapp - endpoint (using Azure's samples)
az deployment group create --resource-group $RESOURCE_GROUP \
--template-uri "https://raw.githubusercontent.com/Azure-Samples/azure-event-grid-viewer/main/azuredeploy.json" \
--parameters siteName=$MY_SITE_NAME hostingPlanName=viewerhost
echo "The web app URL: ${MY_SITE_URL}"
# Subscribe to a custom topic:
ENDPOINT="${MY_SITE_URL}/api/updates"
SUB_ID=$(az account show --subscription "" | jq -r '.id')
az eventgrid event-subscription create \
--source-resource-id "/subscriptions/$SUB_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.EventGrid/topics/$MY_TOPIC_NAME" \
--name az2204viewerSub \
--endpoint $ENDPOINT
# Send an event:
# Retrieving URL+key for custom topic:
TOPIC_ENDPOINT=$(az eventgrid topic show --name $MY_TOPIC_NAME -g $RESOURCE_GROUP --query "endpoint" --output tsv)
KEY=$(az eventgrid topic key list --name $MY_TOPIC_NAME -g $RESOURCE_GROUP --query "key1" --output tsv)
EVENT='[ {"id": "'"$RANDOM"'", "eventType": "recordInserted", "subject": "myapp/vehicles/motorcycles", "eventTime": "'`date +%Y-%m-%dT%H:%M:%S%z`'", "data":{ "make": "Contoso", "model": "Monster"},"dataVersion": "1.0"} ]'
curl -X POST -H "aeg-sas-key: $KEY" -d "$EVENT" $TOPIC_ENDPOINT
{Namespace}/{EventHub}/{PartitionId}/{Year}/{Month}/{Day}/{Hour}/{Minute}/{Second}
EventProcessorClient
.NET/Java, EventHubConsumerClient
for Python/JavascriptMore on the Client itself: https://learn.microsoft.com/en-us/dotnet/api/azure.messaging.eventhubs.eventprocessorclient?view=azure-dotnet
Access - as for other services:
Authorization using:
Perform common operations with the event hubs client library
Describes:
Service bus vs Queues:
session ID
, trnascational/atomic. support for <256kBytes.Tiers:
Advanced features:
Routing/correlation:
SessionId
and binding consumer’s session to it)NOTE: sender owns queue for responses. Responses contain correlationID
Payload serialziation:
#!/bin/bash
LOCATION=westeurope
MY_NAMESPACE_NAME=servicebus-demo-123abc0
RESOURCE_GROUP=servicebus-demo-rg
SERVICE_BUS_NAME=service-queue
az group create --name $RESOURCE_GROUP --location $LOCATION
# Create service bus:
az servicebus namespace create \
--resource-group $RESOURCE_GROUP \
--name $MY_NAMESPACE_NAME \
--location $LOCATION
# Create service bus queue:
az servicebus queue create --resource-group $RESOURCE_GROUP \
--namespace-name $MY_NAMESPACE_NAME \
--name $SERVICE_BUS_NAME
Then:
Result - peeking in Service Bus Explorer:
https://storage-acc.queue.core.windows.net/
TODO: Write a demo program for it.:
C#:
new QueueClient(connStri, queueName);
queueClient.CreateIfNotExists();
- creating queuequeueClient.SendMessage(message);
- sendingPeekedMessage[] peekedMessage = queueClient.PeekMessage();
- peekingQueueMessage[] message = queueClient.ReceiveMessages();
queueClient.UpdateMessage(message[0].MessageId, message[0].PopReceipt, "Updated contents", TimeSpan.FromSeconds(60.0));
// NOTE: TimeSpan.FromSeconds(60.0) is invisibility window.
queueClient.ReceiveMessages();
and then queueClient.DeleteMessage
- dequeueingqueueClient.GetProperties();
- getting props like length.queueClient.Delete();
- deletes message