Delen via


Subindelingen in Durable Functions (Azure Functions)

Naast het aanroepen van activiteitsfuncties kunnen orchestratorfuncties andere orchestratorfuncties aanroepen. U kunt bijvoorbeeld een grotere orkestratie maken uit een bibliotheek met kleinere orchestrator-functies. U kunt ook meerdere exemplaren van een orchestratorfunctie parallel uitvoeren.

Een orchestratorfunctie kan een andere orchestratorfunctie aanroepen met behulp van de API call-sub-orchestrator . Het artikel Foutafhandeling en compensatie bevat meer informatie over automatische nieuwe pogingen.

Suborchestratorfuncties gedragen zich net als activiteitsfuncties vanuit het perspectief van de beller. Ze kunnen een waarde retourneren en een uitzondering genereren als de bovenliggende orchestratorfunctie deze verwacht.

Opmerking

In PowerShell worden sub-orkestraties alleen ondersteund in de zelfstandige SDK: AzureFunctions.PowerShell.Durable.SDK. Bekijk het verschil tussen de zelfstandige SDK en de verouderde ingebouwde SDK, samen met de migratiehandleiding.

Opmerking

Versie 4 van het Node.js programmeermodel voor Azure Functions is algemeen beschikbaar. Het nieuwe v4-model is ontworpen voor een flexibelere en intuïtievere ervaring voor JavaScript- en TypeScript-ontwikkelaars. Meer informatie over de verschillen tussen v3 en v4 in de migratiehandleiding.

In de volgende codefragmenten geeft JavaScript (PM4) het programmeermodel V4 aan, de nieuwe ervaring.

Voorbeeld

In het volgende voorbeeld ziet u een IoT-scenario ('Internet of Things') waarin meerdere apparaten moeten worden ingericht. De volgende functie vertegenwoordigt de inrichtingswerkstroom die voor elk apparaat moet worden uitgevoerd:

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: ...
}

Deze orkestratiefunctie kan worden gebruikt as-is voor eenmalige provisioning van apparaten of kan deel uitmaken van een grotere orkestratie. In het laatste geval kan de bovenliggende orchestratorfunctie exemplaren plannen van het gebruik van DeviceProvisioningOrchestration de API call-sub-orchestrator .

In het volgende voorbeeld ziet u hoe u meerdere orchestratorfuncties tegelijk uitvoert:

[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);

    // ...
}

Opmerking

De vorige C#-voorbeelden zijn voor Durable Functions 2.x. Voor Durable Functions 1.x moet u DurableOrchestrationContext in plaats van IDurableOrchestrationContext gebruiken. Zie het artikel Over Durable Functions-versies voor meer informatie over de verschillen tussen versies.

Opmerking

Suborchestrationen moeten worden gedefinieerd in dezelfde functietoepassing als de hoofdorchestration. Als u orkestraties in een andere functie-app wilt aanroepen en wachten, kunt u overwegen om de ingebouwde ondersteuning voor HTTP-API's en het HTTP 202 pollend consumentenpatroon te gebruiken. Zie het onderwerp HTTP-functies voor meer informatie.

Volgende stappen