Udostępnij przez


Subaranżacje w usłudze Durable Functions (Azure Functions)

Oprócz wywoływania funkcji działania funkcje orkiestratora mogą wywoływać inne funkcje orkiestratora. Na przykład można utworzyć większą aranżację z biblioteki mniejszych funkcji orkiestratora. Możesz też uruchomić wiele wystąpień funkcji orkiestratora równolegle.

Funkcja orkiestratora może wywołać inną funkcję orkiestratora za pomocą interfejsu API "call-sub-orchestrator". Artykuł Obsługa błędów i rekompensata zawiera więcej informacji na temat automatycznego ponawiania prób.

Funkcje suborkiestratora zachowują się identycznie jak funkcje aktywności z perspektywy wywołującego. Mogą zwracać wartość i zgłaszać wyjątek, ponieważ funkcja orkiestratora nadrzędnego je przewiduje.

Uwaga / Notatka

W programie PowerShell orkiestracje podrzędne są wspierane wyłącznie przez autonomiczny zestaw SDK: AzureFunctions.PowerShell.Durable.SDK. Zapoznaj się z różnicą między autonomicznym zestawem SDK i starszym wbudowanym zestawem SDK wraz z przewodnikiem migracji.

Uwaga / Notatka

Wersja 4 modelu programowania Node.js dla usługi Azure Functions jest ogólnie dostępna. Model w wersji 4 został zaprojektowany w celu zapewnienia bardziej elastycznego i intuicyjnego środowiska dla deweloperów języków JavaScript i TypeScript. Aby uzyskać więcej informacji na temat różnic między wersjami 3 i 4, zobacz przewodnik migracji.

W poniższych fragmentach kodu kod JavaScript (PM4) oznacza model programowania w wersji 4, nowe środowisko.

Przykład

Poniższy przykład ilustruje scenariusz IoT ("Internet rzeczy"), w którym należy aprowizować wiele urządzeń. Następująca funkcja reprezentuje przepływ pracy aprowizacji, który należy wykonać dla każdego urządzenia:

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

Tej funkcji koordynatora można użyć as-is do jednorazowej konfiguracji urządzeń lub może być częścią większej orkiestracji. W tym drugim przypadku funkcja nadrzędnego orkiestratora może planować wystąpienia DeviceProvisioningOrchestration przy użyciu interfejsu API "call-sub-orchestrator".

W poniższym przykładzie pokazano, jak uruchamiać wiele funkcji orkiestratora w tym samym czasie:

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

    // ...
}

Uwaga / Notatka

Poprzednie przykłady języka C# dotyczą rozszerzenia Durable Functions 2.x. W przypadku Durable Functions 1.x należy użyć DurableOrchestrationContext zamiast IDurableOrchestrationContext. Aby uzyskać więcej informacji na temat różnic między wersjami, zobacz artykuł Wersje Durable Functions.

Uwaga / Notatka

Orkiestracje podrzędne muszą być zdefiniowane w tej samej aplikacji funkcji co orkiestracja nadrzędna. Jeśli musisz wywołać orkiestracje i poczekać na nie w innej aplikacji funkcji, rozważ użycie wbudowanej obsługi interfejsów API HTTP i wzorca sondowania HTTP 202. Aby uzyskać więcej informacji, zobacz temat Funkcje HTTP .

Dalsze kroki