Durable Functions publiceren naar Azure Event Grid
In dit artikel wordt beschreven hoe u Durable Functions instelt om levenscyclusgebeurtenissen voor indelingen (zoals gemaakt, voltooid en mislukt) te publiceren naar een aangepast Azure Event Grid-onderwerp.
Hier volgen enkele scenario's waarin deze functie nuttig is:
DevOps-scenario's zoals blauw/groen-implementaties: u wilt misschien weten of er taken worden uitgevoerd voordat u de implementatiestrategie naast elkaar implementeert.
Geavanceerde ondersteuning voor bewaking en diagnostische gegevens: u kunt statusgegevens van indelingen bijhouden in een extern archief dat is geoptimaliseerd voor query's, zoals Azure SQL Database of Azure Cosmos DB.
Langlopende achtergrondactiviteit: als u Durable Functions gebruikt voor een langlopende achtergrondactiviteit, helpt deze functie u de huidige status te kennen.
Vereisten
- Installeer Microsoft.Azure.WebJobs.Extensions.DurableTask in uw Durable Functions-project.
- Installeer de Azurite-opslagemulator of gebruik een bestaand Azure Storage-account.
- Azure CLI installeren of Azure Cloud Shell gebruiken
Een aangepast Event Grid-onderwerp maken
Maak een Event Grid-onderwerp voor het verzenden van gebeurtenissen vanuit Durable Functions. In de volgende instructies ziet u hoe u een onderwerp maakt met behulp van Azure CLI. U kunt het onderwerp ook maken met behulp van PowerShell of azure Portal.
Een brongroep maken
Maak een resourcegroep met de opdracht az group create
. Momenteel biedt Azure Event Grid geen ondersteuning voor alle regio's. Zie het overzicht van Azure Event Grid voor informatie over welke regio's worden ondersteund.
az group create --name eventResourceGroup --location westus2
Een aangepast onderwerp maken
Een Event Grid-onderwerp biedt een door de gebruiker gedefinieerd eindpunt waarnaar u uw gebeurtenis post. Vervang <topic_name>
door een unieke naam voor het onderwerp. De onderwerpnaam moet uniek zijn omdat deze een DNS-vermelding wordt.
az eventgrid topic create --name <topic_name> -l westus2 -g eventResourceGroup
Het eindpunt en de sleutel ophalen
Haal het eindpunt van het onderwerp op. Vervang door <topic_name>
de naam die u hebt gekozen.
az eventgrid topic show --name <topic_name> -g eventResourceGroup --query "endpoint" --output tsv
Haal de onderwerpsleutel op. Vervang door <topic_name>
de naam die u hebt gekozen.
az eventgrid topic key list --name <topic_name> -g eventResourceGroup --query "key1" --output tsv
U kunt nu gebeurtenissen naar het onderwerp verzenden.
Event Grid-publicatie configureren
Zoek het host.json
bestand in uw Durable Functions-project.
Durable Functions 1.x
Voeg een durableTask
eigenschap toe eventGridTopicEndpoint
en eventGridKeySettingName
voeg deze toe.
{
"durableTask": {
"eventGridTopicEndpoint": "https://<topic_name>.westus2-1.eventgrid.azure.net/api/events",
"eventGridKeySettingName": "EventGridKey"
}
}
Durable Functions 2.x
Voeg een notifications
sectie toe aan de durableTask
eigenschap van het bestand en vervang deze door <topic_name>
de naam die u hebt gekozen. Als de durableTask
of extensions
eigenschappen niet bestaan, maakt u deze zoals in dit voorbeeld:
{
"version": "2.0",
"extensions": {
"durableTask": {
"notifications": {
"eventGrid": {
"topicEndpoint": "https://<topic_name>.westus2-1.eventgrid.azure.net/api/events",
"keySettingName": "EventGridKey"
}
}
}
}
}
De mogelijke configuratie-eigenschappen van Azure Event Grid vindt u in de host.json documentatie. Nadat u het host.json
bestand hebt geconfigureerd, verzendt uw functie-app levenscyclus-gebeurtenissen naar het Event Grid-onderwerp. Deze actie wordt gestart wanneer u uw functie-app zowel lokaal als in Azure uitvoert.
Stel de app-instelling in voor de onderwerpsleutel in de functie-app en local.settings.json
. De volgende JSON is een voorbeeld van de local.settings.json
lokale foutopsporing met behulp van een Azure Storage-emulator. Vervang door <topic_key>
de onderwerpsleutel.
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"EventGridKey": "<topic_key>"
}
}
Als u de opslagemulator gebruikt in plaats van een echt Azure Storage-account, controleert u of het wordt uitgevoerd. Het is een goed idee om alle bestaande opslaggegevens te wissen voordat u deze uitvoert.
Als u een echt Azure Storage-account gebruikt, vervangt UseDevelopmentStorage=true
u dit door local.settings.json
de verbindingsreeks.
Functies maken die luisteren naar gebeurtenissen
Maak met behulp van Azure Portal een andere functie-app om te luisteren naar gebeurtenissen die zijn gepubliceerd door uw Durable Functions-app. U kunt deze het beste vinden in dezelfde regio als het Event Grid-onderwerp.
Een Event Grid-triggerfunctie maken
Selecteer Functions in uw functie-app en selecteer vervolgens + Toevoegen
Zoek naar Event Grid en selecteer vervolgens de Azure Event Grid-triggersjabloon.
Geef de nieuwe trigger een naam en selecteer vervolgens Functie maken.
Er wordt een functie met de volgende code gemaakt:
#r "Newtonsoft.Json" using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Microsoft.Extensions.Logging; public static void Run(JObject eventGridEvent, ILogger log) { log.LogInformation(eventGridEvent.ToString(Formatting.Indented)); }
Een Event Grid-abonnement toevoegen
U kunt nu een Event Grid-abonnement toevoegen voor het Event Grid-onderwerp dat u hebt gemaakt. Zie Concepten in Azure Event Grid voor meer informatie.
Selecteer Integratie in de nieuwe functie en selecteer vervolgens Event Grid Trigger (eventGridEvent).
Selecteer Event Grid-beschrijving maken.
Geef uw gebeurtenisabonnement een naam en selecteer het onderwerptype Event Grid-onderwerpen .
Selecteer het abonnement. Selecteer vervolgens de resourcegroep en resource die u hebt gemaakt voor het Event Grid-onderwerp.
Selecteer Maken.
U bent nu klaar om levenscyclus-gebeurtenissen te ontvangen.
Durable Functions-app uitvoeren om de gebeurtenissen te verzenden
In het Durable Functions-project dat u eerder hebt geconfigureerd, start u de foutopsporing op uw lokale computer en start u een indeling. De app publiceert levenscyclus-gebeurtenissen van Durable Functions naar Event Grid. Controleer of Event Grid de listenerfunctie activeert die u hebt gemaakt door de bijbehorende logboeken in Azure Portal te controleren.
2019-04-20T09:28:21.041 [Info] Function started (Id=3301c3ef-625f-40ce-ad4c-9ba2916b162d)
2019-04-20T09:28:21.104 [Info] {
"id": "054fe385-c017-4ce3-b38a-052ac970c39d",
"subject": "durable/orchestrator/Running",
"data": {
"hubName": "DurableFunctionsHub",
"functionName": "Sample",
"instanceId": "055d045b1c8a415b94f7671d8df693a6",
"reason": "",
"runtimeStatus": "Running"
},
"eventType": "orchestratorEvent",
"eventTime": "2019-04-20T09:28:19.6492068Z",
"dataVersion": "1.0",
"metadataVersion": "1",
"topic": "/subscriptions/<your_subscription_id>/resourceGroups/eventResourceGroup/providers/Microsoft.EventGrid/topics/durableTopic"
}
2019-04-20T09:28:21.104 [Info] Function completed (Success, Id=3301c3ef-625f-40ce-ad4c-9ba2916b162d, Duration=65ms)
2019-04-20T09:28:37.098 [Info] Function started (Id=36fadea5-198b-4345-bb8e-2837febb89a2)
2019-04-20T09:28:37.098 [Info] {
"id": "8cf17246-fa9c-4dad-b32a-5a868104f17b",
"subject": "durable/orchestrator/Completed",
"data": {
"hubName": "DurableFunctionsHub",
"functionName": "Sample",
"instanceId": "055d045b1c8a415b94f7671d8df693a6",
"reason": "",
"runtimeStatus": "Completed"
},
"eventType": "orchestratorEvent",
"eventTime": "2019-04-20T09:28:36.5061317Z",
"dataVersion": "1.0",
"metadataVersion": "1",
"topic": "/subscriptions/<your_subscription_id>/resourceGroups/eventResourceGroup/providers/Microsoft.EventGrid/topics/durableTopic"
}
2019-04-20T09:28:37.098 [Info] Function completed (Success, Id=36fadea5-198b-4345-bb8e-2837febb89a2, Duration=0ms)
Gebeurtenisschema
In de volgende lijst wordt het schema voor levenscyclus gebeurtenissen uitgelegd:
id
: unieke id voor de Event Grid-gebeurtenis.subject
: Pad naar het onderwerp van de gebeurtenis.durable/orchestrator/{orchestrationRuntimeStatus}
.{orchestrationRuntimeStatus}
zal zijnRunning
,Completed
, enFailed
Terminated
.data
: Durable Functions-specifieke parameters.hubName
: TaskHub-naam .functionName
: Orchestrator-functienaam.instanceId
: Durable Functions instanceId.reason
: Aanvullende gegevens die zijn gekoppeld aan de tracerings gebeurtenis. Zie Diagnostische gegevens in Durable Functions (Azure Functions) voor meer informatieruntimeStatus
: Orchestration Runtime-status. Wordt uitgevoerd, voltooid, mislukt, geannuleerd.
eventType
: "orchestratorEvent"eventTime
: Tijd van gebeurtenis (UTC).dataVersion
: Versie van het gebeurtenisschema voor de levenscyclus.metadataVersion
: Versie van de metagegevens.topic
: Event Grid-onderwerpresource.
Lokaal testen
Als u lokaal wilt testen, leest u Lokaal testen met de viewer-web-app.