Delen via


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

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

  1. Selecteer Functions in uw functie-app en selecteer vervolgens + Toevoegen

    Voeg een functie toe in Azure Portal.

  2. Zoek naar Event Grid en selecteer vervolgens de Azure Event Grid-triggersjabloon.

    Selecteer de Event Grid-triggersjabloon in Azure Portal.

  3. Geef de nieuwe trigger een naam en selecteer vervolgens Functie maken.

    Geef de Event Grid-trigger een naam in Azure Portal.

    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.

  1. Selecteer Integratie in de nieuwe functie en selecteer vervolgens Event Grid Trigger (eventGridEvent).

    Selecteer de koppeling Event Grid-trigger.

  2. Selecteer Event Grid-beschrijving maken.

    Maak het Event Grid-abonnement.

  3. Geef uw gebeurtenisabonnement een naam en selecteer het onderwerptype Event Grid-onderwerpen .

  4. Selecteer het abonnement. Selecteer vervolgens de resourcegroep en resource die u hebt gemaakt voor het Event Grid-onderwerp.

  5. Selecteer Maken.

    Hiermee wordt een Event Grid-abonnement gemaakt.

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, en FailedTerminated.
  • data: Durable Functions-specifieke parameters.
  • 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.

Volgende stappen