Dela via


Underorkestreringar i Durable Functions (Azure Functions)

Förutom att anropa aktivitetsfunktioner kan orkestreringsfunktioner anropa andra orkestreringsfunktioner. Du kan till exempel skapa en större orkestrering av ett bibliotek med mindre orkestreringsfunktioner. Eller så kan du köra flera instanser av en orchestrator-funktion parallellt.

En orchestrator-funktion kan anropa en annan orchestrator-funktion med api:et "call-sub-orchestrator" . Artikeln Felhantering och kompensation innehåller mer information om automatiskt återförsök.

Underorkestreringsfunktioner fungerar precis som aktivitetsfunktioner från anroparens perspektiv. De kan returnera ett värde, utlösa ett undantag och kan inväntas av den överordnade orkestreringsfunktionen.

Kommentar

Underorkestreringar stöds ännu inte i PowerShell.

Kommentar

Version 4 av node.js-programmeringsmodellen för Azure Functions är allmänt tillgänglig. Den nya v4-modellen är utformad för att ha en mer flexibel och intuitiv upplevelse för JavaScript- och TypeScript-utvecklare. Läs mer om skillnaderna mellan v3 och v4 i migreringsguiden.

I följande kodfragment anger JavaScript (PM4) programmeringsmodellen V4, den nya upplevelsen.

Exempel

I följande exempel visas ett IoT-scenario ("Sakernas Internet") där det finns flera enheter som måste etableras. Följande funktion representerar det etableringsarbetsflöde som måste köras för varje enhet:

public static async Task DeviceProvisioningOrchestration(
    [OrchestrationTrigger] IDurableOrchestrationContext context)
{
    string deviceId = context.GetInput<string>();

    // Step 1: Create an installation package in blob storage and return a SAS URL.
    Uri sasUrl = await context.CallActivityAsync<Uri>("CreateInstallationPackage", deviceId);

    // Step 2: Notify the device that the installation package is ready.
    await context.CallActivityAsync("SendPackageUrlToDevice", Tuple.Create(deviceId, sasUrl));

    // Step 3: Wait for the device to acknowledge that it has downloaded the new package.
    await context.WaitForExternalEvent<bool>("DownloadCompletedAck");

    // Step 4: ...
}

Den här orkestreringsfunktionen kan användas som den är för engångsetablering av enheter eller vara en del av en större orkestrering. I det senare fallet kan den överordnade orkestreringsfunktionen schemalägga instanser av DeviceProvisioningOrchestration med api:et "call-sub-orchestrator" .

Här är ett exempel som visar hur du kör flera orkestreringsfunktioner parallellt.

[FunctionName("ProvisionNewDevices")]
public static async Task ProvisionNewDevices(
    [OrchestrationTrigger] IDurableOrchestrationContext context)
{
    string[] deviceIds = await context.CallActivityAsync<string[]>("GetNewDeviceIds");

    // Run multiple device provisioning flows in parallel
    var provisioningTasks = new List<Task>();
    foreach (string deviceId in deviceIds)
    {
        Task provisionTask = context.CallSubOrchestratorAsync("DeviceProvisioningOrchestration", deviceId);
        provisioningTasks.Add(provisionTask);
    }

    await Task.WhenAll(provisioningTasks);

    // ...
}

Kommentar

De tidigare C#-exemplen är för Durable Functions 2.x. För Durable Functions 1.x måste du använda DurableOrchestrationContext i stället för IDurableOrchestrationContext. Mer information om skillnaderna mellan versioner finns i artikeln Durable Functions-versioner .

Kommentar

Underorkestreringar måste definieras i samma funktionsapp som den överordnade orkestreringen. Om du behöver anropa och vänta på orkestreringar i en annan funktionsapp kan du överväga att använda det inbyggda stödet för HTTP-API:er och HTTP 202-avsökningskonsumentmönstret. Mer information finns i avsnittet HTTP-funktioner .

Nästa steg