Dela via


Durable Functions-publicering till Azure Event Grid

Den här artikeln visar hur du konfigurerar Durable Functions för att publicera orkestreringslivscykelhändelser (till exempel skapade, slutförda och misslyckade) till ett anpassat Azure Event Grid-ämne.

Följande är några scenarier där den här funktionen är användbar:

  • DevOps-scenarier som blå/gröna distributioner: Du kanske vill veta om några uppgifter körs innan du implementerar distributionsstrategin sida vid sida.

  • Stöd för avancerad övervakning och diagnostik: Du kan hålla reda på orkestreringsstatusinformation i ett externt arkiv som är optimerat för frågor, till exempel Azure SQL Database eller Azure Cosmos DB.

  • Långvarig bakgrundsaktivitet: Om du använder Durable Functions för en långvarig bakgrundsaktivitet hjälper den här funktionen dig att känna till den aktuella statusen.

Förutsättningar

Skapa ett anpassat Event Grid-ämne

Skapa ett Event Grid-ämne för att skicka händelser från Durable Functions. Följande instruktioner visar hur du skapar ett ämne med hjälp av Azure CLI. Du kan också skapa ämnet med hjälp av PowerShell eller med hjälp av Azure-portalen.

Skapa en resursgrupp

Skapa en resursgrupp med kommandot az group create. Azure Event Grid stöder för närvarande inte alla regioner. Information om vilka regioner som stöds finns i Översikt över Azure Event Grid.

az group create --name eventResourceGroup --location westus2

Skapa en anpassat ämne

Ett Event Grid-ämne innehåller en användardefinierad slutpunkt som du publicerar händelsen till. Ersätt <topic_name> med ett unikt namn för ditt ämne. Ämnesnamnet måste vara unikt eftersom det blir en DNS-post.

az eventgrid topic create --name <topic_name> -l westus2 -g eventResourceGroup

Hämta slutpunkten och nyckeln

Hämta slutpunkten för ämnet. Ersätt <topic_name> med det namn du valde.

az eventgrid topic show --name <topic_name> -g eventResourceGroup --query "endpoint" --output tsv

Hämta ämnesnyckeln. Ersätt <topic_name> med det namn du valde.

az eventgrid topic key list --name <topic_name> -g eventResourceGroup --query "key1" --output tsv

Nu kan du skicka händelser till ämnet.

Konfigurera Event Grid-publicering

Leta reda på filen i host.json ditt Durable Functions-projekt.

Durable Functions 1.x

Lägg till eventGridTopicEndpoint och eventGridKeySettingName i en durableTask egenskap.

{
  "durableTask": {
    "eventGridTopicEndpoint": "https://<topic_name>.westus2-1.eventgrid.azure.net/api/events",
    "eventGridKeySettingName": "EventGridKey"
  }
}

Durable Functions 2.x

Lägg till ett notifications avsnitt i durableTask filens egenskap och ersätt <topic_name> med det namn du har valt. durableTask Om egenskaperna eller extensions inte finns skapar du dem som i det här exemplet:

{
  "version": "2.0",
  "extensions": {
    "durableTask": {
      "notifications": {
        "eventGrid": {
          "topicEndpoint": "https://<topic_name>.westus2-1.eventgrid.azure.net/api/events",
          "keySettingName": "EventGridKey"
        }
      }
    }
  }
}

De möjliga azure Event Grid-konfigurationsegenskaperna finns i host.json dokumentationen. När du har konfigurerat host.json filen skickar funktionsappen livscykelhändelser till Event Grid-ämnet. Den här åtgärden startar när du kör funktionsappen både lokalt och i Azure.

Ange appinställningen för ämnesnyckeln i funktionsappen och local.settings.json. Följande JSON är ett exempel på local.settings.json för lokal felsökning med hjälp av en Azure Storage-emulator. Ersätt <topic_key> med ämnesnyckeln.

{
    "IsEncrypted": false,
    "Values": {
        "AzureWebJobsStorage": "UseDevelopmentStorage=true",
        "EventGridKey": "<topic_key>"
    }
}

Om du använder Lagringsemulatorn i stället för ett riktigt Azure Storage-konto kontrollerar du att det körs. Det är en bra idé att rensa alla befintliga lagringsdata innan du kör.

Om du använder ett riktigt Azure Storage-konto ersätter UseDevelopmentStorage=true du med local.settings.json dess anslutningssträng.

Skapa funktioner som lyssnar efter händelser

Använd Azure-portalen och skapa en annan funktionsapp för att lyssna efter händelser som publicerats av din Durable Functions-app. Det är bäst att hitta den i samma region som Event Grid-ämnet.

Skapa en Event Grid-utlösarfunktion

  1. I funktionsappen väljer du Funktioner och sedan + Lägg till

    Lägg till en funktion i Azure-portalen.

  2. Sök efter Event Grid och välj sedan azure Event Grid-utlösarmallen .

    Välj event grid-utlösarmallen i Azure-portalen.

  3. Namnge den nya utlösaren och välj sedan Skapa funktion.

    Namnge Event Grid-utlösaren i Azure-portalen.

    En funktion med följande kod skapas:

    #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));
    }
    

Lägga till en Event Grid-prenumeration

Nu kan du lägga till en Event Grid-prenumeration för det Event Grid-ämne som du skapade. Mer information finns i Begrepp i Azure Event Grid.

  1. I den nya funktionen väljer du Integration och sedan Event Grid Trigger (eventGridEvent).

    Välj länken Event Grid-utlösare.

  2. Välj Skapa event grid-beskrivning.

    Skapa Event Grid-prenumerationen.

  3. Namnge din händelseprenumeration och välj ämnestypen Event Grid Topics .

  4. Välj prenumerationen. Välj sedan resursgruppen och resursen som du skapade för Event Grid-ämnet.

  5. Välj Skapa.

    Skapa en Event Grid-prenumeration.

Nu är du redo att ta emot livscykelhändelser.

Kör Durable Functions-appen för att skicka händelserna

I projektet Durable Functions som du konfigurerade tidigare börjar du felsöka på den lokala datorn och startar en orkestrering. Appen publicerar livscykelhändelser för Durable Functions till Event Grid. Kontrollera att Event Grid utlöser lyssnarfunktionen som du skapade genom att kontrollera loggarna i Azure-portalen.

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)

Händelseschema

I följande lista förklaras schemat för livscykelhändelser:

  • id: Unik identifierare för Event Grid-händelsen.
  • subject: Sökväg till händelseämnet. durable/orchestrator/{orchestrationRuntimeStatus}. {orchestrationRuntimeStatus} kommer att vara Running, Completed, Failedoch Terminated.
  • data: Durable Functions-specifika parametrar.
    • hubName: TaskHub-namn .
    • functionName: Orchestrator-funktionsnamn.
    • instanceId: Durable Functions instanceId.
    • reason: Ytterligare data som är associerade med spårningshändelsen. Mer information finns i Diagnostik i Durable Functions (Azure Functions)
    • runtimeStatus: Orkestreringskörningsstatus. Körs, slutförs, misslyckades, avbröts.
  • eventType: "orchestratorEvent"
  • eventTime: Händelsetid (UTC).
  • dataVersion: Version av livscykelhändelseschemat.
  • metadataVersion: Version av metadata.
  • topic: Event Grid-ämnesresurs.

Så här testar du lokalt

Om du vill testa lokalt läser du Lokal testning med visningswebbappen.

Nästa steg