Durable Functions publikování do Azure Event Grid
Tento článek ukazuje, jak nastavit Durable Functions pro publikování událostí životního cyklu orchestrace (například vytvořených, dokončených a neúspěšných) do vlastního tématu Azure Event Grid.
Tady je několik scénářů, ve kterých je tato funkce užitečná:
Scénáře DevOps, jako jsou modrá nebo zelená nasazení: Před implementací strategie souběžného nasazení možná budete chtít vědět, jestli jsou spuštěné nějaké úlohy.
Pokročilá podpora monitorování a diagnostiky: Informace o stavu orchestrace můžete sledovat v externím úložišti optimalizovaném pro dotazy, jako je Azure SQL Database nebo Azure Cosmos DB.
Dlouhotrvající aktivita na pozadí: Pokud používáte Durable Functions pro dlouhotrvající aktivitu na pozadí, pomůže vám tato funkce zjistit aktuální stav.
Požadavky
- Do projektu Durable Functions nainstalujte Microsoft.Azure.WebJobs.Extensions.DurableTask.
- Nainstalujte emulátor úložiště Azurite nebo použijte existující účet služby Azure Storage.
- Instalace Azure CLI nebo použití Azure Cloud Shell
Vytvoření vlastního tématu Event Gridu
Vytvořte téma Event Gridu pro odesílání událostí z Durable Functions. Následující pokyny ukazují, jak vytvořit téma pomocí Azure CLI. Téma můžete vytvořit také pomocí PowerShellu nebo pomocí Azure Portal.
Vytvoření skupiny prostředků
Pomocí příkazu az group create
vytvořte skupinu prostředků. Azure Event Grid v současné době nepodporuje všechny oblasti. Informace o podporovaných oblastech najdete v přehledu Azure Event Grid.
az group create --name eventResourceGroup --location westus2
Vytvoření vlastního tématu
Téma Event Gridu poskytuje uživatelem definovaný koncový bod, do kterého událost publikujete. Nahraďte <topic_name>
jedinečným názvem vašeho tématu. Název tématu musí být jedinečný, protože se stane položkou DNS.
az eventgrid topic create --name <topic_name> -l westus2 -g eventResourceGroup
Získání koncového bodu a klíče
Získejte koncový bod tématu. Nahraďte <topic_name>
názvem, který jste zvolili.
az eventgrid topic show --name <topic_name> -g eventResourceGroup --query "endpoint" --output tsv
Získejte klíč tématu. Nahraďte <topic_name>
názvem, který jste zvolili.
az eventgrid topic key list --name <topic_name> -g eventResourceGroup --query "key1" --output tsv
Teď můžete do tématu odesílat události.
Konfigurace publikování Event Gridu
V projektu Durable Functions najděte host.json
soubor .
Durable Functions 1.x
Přidejte eventGridTopicEndpoint
do vlastnosti a durableTask
eventGridKeySettingName
.
{
"durableTask": {
"eventGridTopicEndpoint": "https://<topic_name>.westus2-1.eventgrid.azure.net/api/events",
"eventGridKeySettingName": "EventGridKey"
}
}
Durable Functions 2.x
notifications
Do vlastnosti souboru přidejte oddíl durableTask
a nahraďte <topic_name>
názvem, který jste zvolili. durableTask
Pokud vlastnosti nebo extensions
neexistují, vytvořte je jako v tomto příkladu:
{
"version": "2.0",
"extensions": {
"durableTask": {
"notifications": {
"eventGrid": {
"topicEndpoint": "https://<topic_name>.westus2-1.eventgrid.azure.net/api/events",
"keySettingName": "EventGridKey"
}
}
}
}
}
Možné Azure Event Grid vlastnosti konfigurace najdete v dokumentaci k souboru host.json. Po nakonfigurování host.json
souboru odesílá aplikace funkcí události životního cyklu do tématu Event Gridu. Tato akce se spustí spuštěním aplikace funkcí místně i v Azure.
Nastavení aplikace pro klíč tématu v aplikaci funkcí a local.settings.json
. Následující kód JSON je ukázka objektu local.settings.json
pro místní ladění pomocí emulátoru služby Azure Storage. Nahraďte <topic_key>
klíčem tématu.
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"EventGridKey": "<topic_key>"
}
}
Pokud používáte emulátor úložiště místo skutečného účtu služby Azure Storage, ujistěte se, že je spuštěný. Před spuštěním je vhodné vymazat všechna existující data úložiště.
Pokud používáte skutečný účet služby Azure Storage, nahraďte UseDevelopmentStorage=true
in local.settings.json
připojovacím řetězcem.
Vytváření funkcí, které naslouchají událostem
Pomocí Azure Portal vytvořte další aplikaci funkcí, která bude naslouchat událostem publikovaným vaší Durable Functions aplikací. Nejlepší je najít ho ve stejné oblasti jako téma Event Gridu.
Vytvoření funkce triggeru Event Gridu
V aplikaci funkcí vyberte Funkce a pak vyberte + Přidat.
Vyhledejte Event Grid a pak vyberte šablonu triggeru Azure Event Grid.
Pojmenujte nový trigger a pak vyberte Vytvořit funkci.
Vytvoří se funkce s následujícím kódem:
#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)); }
Přidání odběru Event Gridu
Teď můžete přidat odběr Event Gridu pro téma Event Gridu, které jste vytvořili. Další informace najdete v tématu Koncepty v Azure Event Grid.
V nové funkci vyberte Integrace a pak trigger Event Gridu (eventGridEvent).
Vyberte Vytvořit popis Event Gridu.
Pojmenujte svůj odběr události a vyberte typ tématu Témata Event Gridu .
Vyberte předplatné. Pak vyberte skupinu prostředků a prostředek, které jste vytvořili pro téma Event Gridu.
Vyberte Vytvořit.
Teď jste připraveni přijímat události životního cyklu.
Spuštění Durable Functions aplikace pro odesílání událostí
V projektu Durable Functions, který jste nakonfigurovali dříve, spusťte ladění na místním počítači a spusťte orchestraci. Aplikace publikuje události Durable Functions životního cyklu do Event Gridu. Zkontrolujte protokoly v Azure Portal a ověřte, že Event Grid aktivuje funkci naslouchacího procesu, kterou jste vytvořili.
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)
Schéma událostí
Následující seznam vysvětluje schéma událostí životního cyklu:
id
: Jedinečný identifikátor události Event Gridu.subject
: Cesta k předmětu události.durable/orchestrator/{orchestrationRuntimeStatus}
.{orchestrationRuntimeStatus}
Running
budou ,Completed
,Failed
aTerminated
.data
: Durable Functions specifické parametry.hubName
: Název taskHubu .functionName
: Název funkce orchestratoru.instanceId
: Durable Functions instanceId.reason
: Další data přidružená k události sledování. Další informace najdete v tématu Diagnostika v Durable Functions (Azure Functions).runtimeStatus
: Stav modulu runtime orchestrace. Spuštěno, Dokončeno, Neúspěšné, Zrušeno.
eventType
: "orchestratorEvent"eventTime
: Čas události (UTC).dataVersion
: Verze schématu událostí životního cyklu.metadataVersion
: Verze metadat.topic
: Prostředek tématu Event Gridu.
Místní testování
Pokud chcete testovat místně, přečtěte si téma Místní testování pomocí webové aplikace prohlížeče. Můžete také použít nástroj ngrok , jak je znázorněno v tomto kurzu.