Udostępnij za pośrednictwem


Publikowanie w usłudze Azure Event Grid w usłudze Durable Functions

W tym artykule pokazano, jak skonfigurować rozszerzenie Durable Functions w celu publikowania zdarzeń cyklu życia aranżacji (takich jak utworzone, ukończone i zakończone) do niestandardowego tematu usługi Azure Event Grid.

Poniżej przedstawiono kilka scenariuszy, w których ta funkcja jest przydatna:

  • Scenariusze devOps, takie jak wdrożenia niebieskie/zielone: warto wiedzieć, czy jakiekolwiek zadania są uruchomione przed wdrożeniem strategii wdrażania równoległego.

  • Zaawansowana obsługa monitorowania i diagnostyki: możesz śledzić informacje o stanie aranżacji w zewnętrznym magazynie zoptymalizowanym pod kątem zapytań, takich jak usługa Azure SQL Database lub Azure Cosmos DB.

  • Długotrwałe działanie w tle: jeśli używasz rozszerzenia Durable Functions do długotrwałego działania w tle, ta funkcja ułatwia zapoznanie się z bieżącym stanem.

Wymagania wstępne

Tworzenie niestandardowego tematu usługi Event Grid

Utwórz temat usługi Event Grid na potrzeby wysyłania zdarzeń z rozszerzenia Durable Functions. Poniższe instrukcje pokazują, jak utworzyć temat przy użyciu interfejsu wiersza polecenia platformy Azure. Temat można również utworzyć przy użyciu programu PowerShell lub witryny Azure Portal.

Tworzenie grupy zasobów

Utwórz grupę zasobów za pomocą polecenia az group create. Obecnie usługa Azure Event Grid nie obsługuje wszystkich regionów. Aby uzyskać informacje o obsługiwanych regionach, zobacz Omówienie usługi Azure Event Grid.

az group create --name eventResourceGroup --location westus2

Tworzenie tematu niestandardowego

Temat usługi Event Grid zawiera zdefiniowany przez użytkownika punkt końcowy, do którego publikujesz zdarzenie. Zamień <topic_name> na unikatową nazwę tematu. Nazwa tematu musi być unikatowa, ponieważ staje się wpisem DNS.

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

Pobieranie punktu końcowego i klucza

Pobierz punkt końcowy tematu. Zastąp <topic_name> ciąg wybraną nazwą.

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

Pobierz klucz tematu. Zastąp <topic_name> ciąg wybraną nazwą.

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

Teraz możesz wysyłać zdarzenia do tematu.

Konfigurowanie publikowania usługi Event Grid

W projekcie Durable Functions znajdź host.json plik.

Durable Functions 1.x

Dodaj eventGridTopicEndpoint właściwość i eventGridKeySettingName w jej właściwości durableTask .

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

Durable Functions 2.x

Dodaj sekcję notifications do durableTask właściwości pliku, zastępując ciąg <topic_name> wybraną nazwą. durableTask Jeśli właściwości lub extensions nie istnieją, utwórz je w następujący przykład:

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

Możliwe właściwości konfiguracji usługi Azure Event Grid można znaleźć w dokumentacji host.json. Po skonfigurowaniu pliku aplikacja funkcji wysyła zdarzenia cyklu życia do tematu host.json usługi Event Grid. Ta akcja rozpoczyna się po uruchomieniu aplikacji funkcji lokalnie i na platformie Azure.

Ustaw ustawienie aplikacji dla klucza tematu w aplikacji funkcji i local.settings.json. Poniższy kod JSON jest przykładem local.settings.json debugowania lokalnego przy użyciu emulatora usługi Azure Storage. Zastąp <topic_key> ciąg kluczem tematu.

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

Jeśli używasz emulatora usługi Storage zamiast rzeczywistego konta usługi Azure Storage, upewnij się, że jest ono uruchomione. Dobrym pomysłem jest wyczyszczenie wszelkich istniejących danych magazynu przed wykonaniem.

Jeśli używasz rzeczywistego konta usługi Azure Storage, zastąp element UseDevelopmentStorage=true swoim local.settings.json parametry połączenia.

Tworzenie funkcji, które nasłuchują zdarzeń

Za pomocą witryny Azure Portal utwórz inną aplikację funkcji do nasłuchiwania zdarzeń opublikowanych przez aplikację Durable Functions. Najlepiej zlokalizować go w tym samym regionie co temat usługi Event Grid.

Tworzenie funkcji wyzwalacza usługi Event Grid

  1. W aplikacji funkcji wybierz pozycję Funkcje, a następnie wybierz pozycję + Dodaj

    Dodaj funkcję w witrynie Azure Portal.

  2. Wyszukaj usługę Event Grid, a następnie wybierz szablon wyzwalacza usługi Azure Event Grid.

    Wybierz szablon wyzwalacza usługi Event Grid w witrynie Azure Portal.

  3. Nadaj nowej nazwie wyzwalacz, a następnie wybierz pozycję Utwórz funkcję.

    Nazwij wyzwalacz usługi Event Grid w witrynie Azure Portal.

    Zostanie utworzona funkcja z następującym kodem:

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

Dodawanie subskrypcji usługi Event Grid

Teraz możesz dodać subskrypcję usługi Event Grid dla utworzonego tematu usługi Event Grid. Aby uzyskać więcej informacji, zobacz Pojęcia w usłudze Azure Event Grid.

  1. W nowej funkcji wybierz pozycję Integracja, a następnie wybierz pozycję Wyzwalacz usługi Event Grid (eventGridEvent).

    Wybierz link Wyzwalacz usługi Event Grid.

  2. Wybierz pozycję Utwórz opis usługi Event Grid.

    Utwórz subskrypcję usługi Event Grid.

  3. Nazwij subskrypcję zdarzeń i wybierz typ tematu Tematy usługi Event Grid.

  4. Wybierz subskrypcję. Następnie wybierz grupę zasobów i zasób utworzony dla tematu usługi Event Grid.

  5. Wybierz pozycję Utwórz.

    Tworzy subskrypcję usługi Event Grid.

Teraz możesz otrzymywać zdarzenia cyklu życia.

Uruchamianie aplikacji Durable Functions w celu wysyłania zdarzeń

W skonfigurowanym wcześniej projekcie durable functions rozpocznij debugowanie na komputerze lokalnym i rozpocznij aranżację. Aplikacja publikuje zdarzenia cyklu życia rozszerzenia Durable Functions w usłudze Event Grid. Sprawdź, czy usługa Event Grid wyzwala utworzoną funkcję odbiornika, sprawdzając jego dzienniki w witrynie 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)

Schemat zdarzeń

Poniższa lista zawiera opis schematu zdarzeń cyklu życia:

  • id: unikatowy identyfikator zdarzenia usługi Event Grid.
  • subject: Ścieżka do tematu zdarzenia. durable/orchestrator/{orchestrationRuntimeStatus}. {orchestrationRuntimeStatus} będzie to Running, Completed, Failedi Terminated.
  • data: Parametry specyficzne dla rozszerzenia Durable Functions.
    • hubName: Nazwa witryny TaskHub .
    • functionName: nazwa funkcji programu Orchestrator.
    • instanceId: Durable Functions instanceId.
    • reason: Dodatkowe dane skojarzone ze zdarzeniem śledzenia. Aby uzyskać więcej informacji, zobacz Diagnostyka w usłudze Durable Functions (Azure Functions)
    • runtimeStatus: Stan środowiska uruchomieniowego orkiestracji. Uruchomione, ukończone, zakończone, zakończone niepowodzeniem, anulowane.
  • eventType: "orchestratorEvent"
  • eventTime: Czas zdarzenia (UTC).
  • dataVersion: wersja schematu zdarzenia cyklu życia.
  • metadataVersion: wersja metadanych.
  • topic: zasób tematu usługi Event Grid.

Jak testować lokalnie

Aby przetestować lokalnie, przeczytaj artykuł Lokalne testowanie za pomocą aplikacji internetowej przeglądarki.

Następne kroki