Dílčí orchestrace v Durable Functions (Azure Functions)

Kromě volání funkcí aktivit můžou funkce orchestrátoru volat i jiné funkce orchestrátoru. Můžete například vytvořit větší orchestraci z knihovny menších funkcí orchestrátoru. Nebo můžete paralelně spustit více instancí funkce orchestrátoru.

Funkce orchestrátoru může volat jinou funkci orchestrátoru pomocí rozhraní API "call-sub-orchestrator" . Článek o zpracování chyb a kompenzaci obsahuje další informace o automatickém opakování.

Funkce dílčího orchestrátoru se chovají stejně jako funkce aktivit z pohledu volajícího. Můžou vrátit hodnotu, vyvolat výjimku a mohou být očekávána nadřazenou funkcí orchestrátoru.

Poznámka:

Dílčí orchestrace se zatím v PowerShellu nepodporují.

Poznámka:

Verze 4 programovacího modelu Node.js pro Azure Functions je obecně dostupná. Nový model v4 je navržený tak, aby měl flexibilnější a intuitivnější prostředí pro vývojáře v JavaScriptu a TypeScriptu. Další informace o rozdílech mezi v3 a v4 najdete v průvodci migrací.

V následujících fragmentech kódu JavaScript (PM4) označuje programovací model V4, nové prostředí.

Příklad

Následující příklad znázorňuje scénář IoT (Internet věcí), ve kterém je potřeba zřídit více zařízení. Následující funkce představuje pracovní postup zřizování, který je potřeba spustit pro každé zařízení:

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

Tuto funkci orchestrátoru je možné použít jako u jednorázového zřizování zařízení nebo může být součástí větší orchestrace. V druhém případě může nadřazená funkce orchestrátoru naplánovat instance DeviceProvisioningOrchestration pomocí rozhraní API "call-sub-orchestrator" .

Tady je příklad, který ukazuje, jak paralelně spouštět více funkcí orchestrátoru.

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

    // ...
}

Poznámka:

Předchozí příklady jazyka C# jsou pro Durable Functions 2.x. Pro Durable Functions 1.x je nutné použít DurableOrchestrationContext místo IDurableOrchestrationContext. Další informace o rozdílech mezi verzemi najdete v článku o verzích Durable Functions.

Poznámka:

Dílčí orchestrace musí být definovány ve stejné aplikaci funkcí jako nadřazená orchestrace. Pokud potřebujete volat a čekat na orchestrace v jiné aplikaci funkcí, zvažte použití integrované podpory pro rozhraní HTTP API a vzor příjemce dotazování HTTP 202. Další informace najdete v tématu funkce HTTP.

Další kroky