Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Pomocí Durable Functions, funkce Azure Functions, můžete psát stavové bezserverové pracovní postupy v jazyce C#. V tomto rychlém startu naklonujete a spustíte ukázkovou aplikaci, která demonstruje model orchestrace zřetězení funkcí:
- Řetězení funkcí: Volá aktivity postupně (Tokio → Seattle → Londýn).
Na konci budete mít orchestraci spuštěnou místně s emulátorem Plánovače úloh Durable a budete moct zobrazit jeho stav na řídicím panelu.
- Naklonujte a připravte ukázkový projekt Hello Cities.
- Nastavte emulátor plánovače úloh Durable a Azurite pro místní vývoj.
- Sestavte a spusťte aplikaci funkcí a aktivujte orchestraci.
- Zkontrolujte stav orchestrace a výstup na řídicím panelu Plánovače úloh Durable.
Předpoklady
- .NET 8 SDK nebo novější nainstalováno.
- Azure Functions Core Tools v4 nebo novější.
- Docker pro spuštění emulátoru a Azurite.
- Naklonujte úložiště Durable Task Scheduler GitHub a použijte ukázku rychlého startu.
Nastavení emulátoru Plánovače úloh Durable
Emulátor plánovače úloh Durable Task Scheduler poskytuje místní vývojové prostředí, abyste mohli otestovat orchestrace bez předplatného Azure. Hostitel .NET Functions také vyžaduje Azurite pro místní úložiště.
Spusťte oba kontejnery:
docker run -d --name dtsemulator -p 8080:8080 -p 8082:8082 \
mcr.microsoft.com/dts/dts-emulator:latest
docker run -d --name azurite -p 10000:10000 -p 10001:10001 -p 10002:10002 \
mcr.microsoft.com/azure-storage/azurite
Tip
Jakmile je emulátor spuštěný, můžete přistupovat k řídicímu panelu Durable Task Scheduler na adrese http://localhost:8082, kde můžete sledovat orchestrace.
Spusťte ukázku pro rychlý start
Přejděte do ukázkového adresáře Hello Cities:
cd samples/durable-functions/dotnet/HelloCities/httpVytvořte
local.settings.jsonsoubor s konfigurací emulátoru:{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated", "DURABLE_TASK_SERVICE_CONNECTION_STRING": "Endpoint=http://localhost:8080;TaskHub=default;Authentication=None", "TASKHUB_NAME": "default" } }Sestavení projektu:
dotnet buildSpusťte aplikaci funkcí:
func startV samostatném terminálu aktivujte orchestraci:
$response = Invoke-RestMethod -Method POST -Uri http://localhost:7071/api/DurableFunctionsOrchestrationCSharp1_HttpStart $responseOdpověď obsahuje stavové adresy URL pro instanci orchestrátoru.
statusQueryGetUriZkopírujte hodnotu a spusťte ji a zkontrolujte výsledek:Invoke-RestMethod -Uri $response.statusQueryGetUri
Očekávaný výstup
Požadavek POST vrátí odpověď JSON s adresami URL stavu. Příklad:
{
"id": "<instanceId>",
"statusQueryGetUri": "http://localhost:7071/runtime/webhooks/durabletask/instances/<instanceId>?code=...",
"sendEventPostUri": "...",
"terminatePostUri": "...",
"purgeHistoryDeleteUri": "..."
}
Když zadáte dotaz na statusQueryGetUri a hodnota runtimeStatus orchestrace je Completed, najdete výsledky pozdravu v poli output:
{
"name": "DurableFunctionsOrchestrationCSharp1",
"runtimeStatus": "Completed",
"output": ["Hello Tokyo!", "Hello Seattle!", "Hello London!"]
}
Tip
Pokud se na runtimeStatus zobrazí Running nebo Pending, chvíli počkejte a znovu odešlete dotaz na statusQueryGetUri.
Otevřete řídicí panel Plánovače úloh Durable na adrese http://localhost:8082, abyste zobrazili stav orchestrace a historii spuštění.
Vysvětlení kódu
Ukázkový projekt v DurableFunctionsOrchestrationCSharp1.cs obsahuje všechny tři typy funkcí potřebné pro aplikaci Durable Functions.
Funkce aktivity
Aktivita SayHello přebírá název města a vrací pozdrav:
[Function(nameof(SayHello))]
public static string SayHello([ActivityTrigger] string name, FunctionContext executionContext)
{
ILogger logger = executionContext.GetLogger("SayHello");
logger.LogInformation("Saying hello to {name}.", name);
return $"Hello {name}!";
}
Orchestrátorová funkce
Orchestrátor volá SayHello postupně pro všechna tři města:
[Function(nameof(DurableFunctionsOrchestrationCSharp1))]
public static async Task<List<string>> RunOrchestrator(
[OrchestrationTrigger] TaskOrchestrationContext context)
{
ILogger logger = context.CreateReplaySafeLogger(nameof(DurableFunctionsOrchestrationCSharp1));
logger.LogInformation("Saying hello.");
var outputs = new List<string>();
outputs.Add(await context.CallActivityAsync<string>(nameof(SayHello), "Tokyo"));
outputs.Add(await context.CallActivityAsync<string>(nameof(SayHello), "Seattle"));
outputs.Add(await context.CallActivityAsync<string>(nameof(SayHello), "London"));
return outputs;
}
Klientská funkce
Funkce klienta aktivovaná protokolem HTTP spustí orchestraci:
[Function("DurableFunctionsOrchestrationCSharp1_HttpStart")]
public static async Task<HttpResponseData> HttpStart(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequestData req,
[DurableClient] DurableTaskClient client,
FunctionContext executionContext)
{
ILogger logger = executionContext.GetLogger("DurableFunctionsOrchestrationCSharp1_HttpStart");
string instanceId = await client.ScheduleNewOrchestrationInstanceAsync(
nameof(DurableFunctionsOrchestrationCSharp1));
logger.LogInformation("Started orchestration with ID = '{instanceId}'.", instanceId);
return await client.CreateCheckStatusResponseAsync(req, instanceId);
}
Konfigurace
Ukázka používá emulátor Plánovače úloh Durable jako back-end úložiště. Toto nastavení je nakonfigurováno v host.json:
{
"version": "2.0",
"extensions": {
"durableTask": {
"storageProvider": {
"type": "azureManaged",
"connectionStringName": "DURABLE_TASK_SERVICE_CONNECTION_STRING"
},
"hubName": "%TASKHUB_NAME%"
}
}
}
V local.settings.json jsou nastaveny připojovací řetězec emulátoru a název centra úloh:
{
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated",
"DURABLE_TASK_SERVICE_CONNECTION_STRING": "Endpoint=http://localhost:8080;TaskHub=default;Authentication=None",
"TASKHUB_NAME": "default"
}
}
Vyčistěte zdroje
Po dokončení zastavte kontejnery emulátoru:
docker stop dtsemulator azurite && docker rm dtsemulator azurite
Další kroky
- Přečtěte si o vzorech aplikací common Durable Functions.
- Přečtěte si informace o poskytovateli úložiště Durable Functions.