Publikování Durable Functions do Azure Event Gridu
Tento článek ukazuje, jak nastavit Durable Functions pro publikování událostí životního cyklu orchestrace (jako jsou vytvořené, dokončené a neúspěšné) do vlastního tématu služby Azure Event Grid.
Tady jsou některé scénáře, ve kterých je tato funkce užitečná:
Scénáře DevOps, jako jsou modrá nebo zelená nasazení: Před implementací strategie nasazení vedle sebe můžete chtít vědět, jestli některé úlohy běží.
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 dlouho běžící aktivitu na pozadí, tato funkce vám pomůže zjistit aktuální stav.
Požadavky
- Nainstalujte Microsoft.Azure.WebJobs.Extensions.DurableTask do projektu Durable Functions.
- 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 Shellu
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 webu Azure Portal.
Vytvoření skupiny zdrojů
Skupinu prostředků vytvoříte příkazem az group create
. Azure Event Grid v současné době nepodporuje všechny oblasti. Informace o podporovaných oblastech najdete v přehledu služby 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 vyhledejte host.json
soubor.
Durable Functions 1.x
Přidejte a eventGridKeySettingName
vložte durableTask
eventGridTopicEndpoint
vlastnost.
{
"durableTask": {
"eventGridTopicEndpoint": "https://<topic_name>.westus2-1.eventgrid.azure.net/api/events",
"eventGridKeySettingName": "EventGridKey"
}
}
Durable Functions 2.x
notifications
Přidejte do vlastnosti souboru oddíl durableTask
a nahraďte <topic_name>
ho názvem, který jste zvolili. durableTask
Pokud neexistují nebo extensions
vlastnosti 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é vlastnosti konfigurace služby Azure Event Grid najdete v host.json dokumentaci. Po nakonfigurování host.json
souboru aplikace funkcí odesílá události životního cyklu do tématu Event Gridu. Tato akce se spustí při místním spuštění aplikace funkcí i v Azure.
Nastavte nastavení aplikace pro klíč tématu v aplikaci funkcí a local.settings.json
. Následující JSON je ukázka local.settings.json
místního 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 azure Storage, nahraďte UseDevelopmentStorage=true
local.settings.json
ho jeho připojovací řetězec.
Vytváření funkcí, které naslouchají událostem
Pomocí webu Azure Portal vytvořte další aplikaci funkcí, která bude naslouchat událostem publikovaným vaší aplikací Durable Functions. Nejlepší je ji najít 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 Gridu.
Pojmenujte novou aktivační událost 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 ve službě Azure Event Grid.
V nové funkci vyberte Integration (Integrace) a pak vyberte Event Grid Trigger (eventGridEvent).
Vyberte Vytvořit popis event Gridu.
Pojmenujte své odběry událostí 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í aplikace Durable Functions 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 životního cyklu Durable Functions do Event Gridu. Ověřte, že Event Grid aktivuje funkci naslouchacího procesu, kterou jste vytvořili, tím, že zkontroluje protokoly na webu Azure Portal.
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}
budeRunning
, ,Completed
Failed
aTerminated
.data
: Durable Functions Specific Parameters.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.
Jak testovat místně
Pokud chcete testovat místně, přečtěte si místní testování pomocí webové aplikace prohlížeče.