15 Dec 2020 - Matthias Voigt
Azure Durable Functions bieten eine leistungsstarke Möglichkeit, zustandsbehaftete Workflows in einer serverlosen Umgebung zu erstellen und zu orchestrieren. In diesem Artikel werde ich erläutern, wie Durable Functions funktionieren, welche Vorteile sie bieten und wie man sie in der Praxis einsetzt.
Durable Functions sind eine Erweiterung von Azure Functions, die es ermöglichen, langfristige, zustandsbehaftete Workflows zu erstellen. Mit Durable Functions können Entwickler komplexe Orchestrierungen definieren, ohne sich um die zugrunde liegende Infrastruktur kümmern zu müssen.
Durable Functions bestehen aus drei Hauptkomponenten:
Erstelle ein neues Azure Functions-Projekt in Visual Studio:
Definiere eine Orchestrator Function, die den Workflow orchestriert:
using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Microsoft.AspNetCore.Http;
public static class FunctionOrchestrator
{
[FunctionName("RunOrchestrator")]
public static async Task<List<string>> RunOrchestrator(
[OrchestrationTrigger] IDurableOrchestrationContext context)
{
var outputs = new List<string>();
// Definieren der Workflow-Schritte
outputs.Add(await context.CallActivityAsync<string>("Function1", "Tokyo"));
outputs.Add(await context.CallActivityAsync<string>("Function1", "Seattle"));
outputs.Add(await context.CallActivityAsync<string>("Function1", "London"));
// Rückgabe der Ergebnisse
return outputs;
}
[FunctionName("Function1")]
public static string SayHello([ActivityTrigger] string name, ILogger log)
{
log.LogInformation($"Saying hello to {name}.");
return $"Hello {name}!";
}
[FunctionName("HttpStart")]
public static async Task<IActionResult> HttpStart(
[HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequest req,
[DurableClient] IDurableOrchestrationClient starter,
ILogger log)
{
// Starten der Orchestrator Function
string instanceId = await starter.StartNewAsync("RunOrchestrator", null);
log.LogInformation($"Started orchestration with ID = '{instanceId}'.");
return starter.CreateCheckStatusResponse(req, instanceId);
}
}
Die Activity Function führt die eigentlichen Aufgaben aus:
[FunctionName("Function1")]
public static string SayHello([ActivityTrigger] string name, ILogger log)
{
log.LogInformation($"Saying hello to {name}.");
return $"Hello {name}!";
}
Die Client Function startet die Orchestrator Function und gibt den Status zurück:
[FunctionName("HttpStart")]
public static async Task<IActionResult> HttpStart(
[HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequest req,
[DurableClient] IDurableOrchestrationClient starter,
ILogger log)
{
string instanceId = await starter.StartNewAsync("RunOrchestrator", null);
log.LogInformation($"Started orchestration with ID = '{instanceId}'.");
return starter.CreateCheckStatusResponse(req, instanceId);
}
Azure Durable Functions bieten eine leistungsstarke und flexible Möglichkeit, zustandsbehaftete Workflows in einer serverlosen Umgebung zu orchestrieren. Sie vereinfachen die Implementierung komplexer Geschäftslogik und bieten dabei Skalierbarkeit, Fehlerbehandlung und Kostenoptimierung. Es lohnt sich, die Möglichkeiten von Durable Functions in zukünftigen Projekten zu erkunden und zu nutzen.
Für weitere Details und eine ausführliche Anleitung besuche die offizielle Microsoft-Dokumentation.