다음을 통해 공유


Durable Functions의 하위 오케스트레이션(Azure Functions)

오케스트레이터 함수는 작업 함수를 호출하는 것 외에도 다른 오케스트레이터 함수를 호출할 수 있습니다. 예를 들어 더 작은 오케스트레이터 함수 라이브러리에서 더 큰 오케스트레이션을 빌드할 수 있습니다. 또는 오케스트레이터 함수의 여러 인스턴스를 병렬로 실행할 수 있습니다.

오케스트레이터 함수는 "call-sub-orchestrator" API를 사용하여 다른 오케스트레이터 함수를 호출 할 수 있습니다. 오류 처리 및 보상 문서에는 자동 재시도에 대한 자세한 정보가 있습니다.

하위 오케스트레이터 함수는 호출자의 관점에서 활동 함수처럼 동작합니다. 부모 오케스트레이터 함수가 예상하는 대로 값을 반환하고 예외를 발생시킬 수 있습니다.

비고

하위 오케스트레이션은 PowerShell에서 아직 지원되지 않습니다.

비고

Azure Functions에 대한 Node.js 프로그래밍 모델의 버전 4는 일반적으로 사용할 수 있습니다. 새 v4 모델은 JavaScript 및 TypeScript 개발자를 위한 보다 유연하고 직관적인 환경을 제공하도록 설계되었습니다. 마이그레이션 가이드에서 v3과 v4의 차이점에 대해 자세히 알아봅니다.

다음 코드 조각에서 JAVAScript(PM4)는 새로운 환경인 프로그래밍 모델 V4를 나타냅니다.

예시

다음 예제에서는 프로비전해야 하는 여러 디바이스가 있는 IoT("사물 인터넷") 시나리오를 보여 줍니다. 다음 함수는 각 디바이스에 대해 실행해야 하는 프로비저닝 워크플로를 나타냅니다.

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

이 오케스트레이터 함수는 일회성 디바이스 프로비저닝에 as-is 사용하거나 더 큰 오케스트레이션의 일부일 수 있습니다. 후자의 경우 부모 오케스트레이터 함수는 DeviceProvisioningOrchestration API를 사용하는 인스턴스 를 예약할 수 있습니다.

다음 예제에서는 동시에 여러 오케스트레이터 함수를 실행하는 방법을 보여 줍니다.

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

    // ...
}

비고

이전 C# 예제는 Durable Functions 2.x에 대한 것입니다. Durable Functions 1.x의 경우, DurableOrchestrationContext 대신 IDurableOrchestrationContext를 사용해야 합니다. 버전 간의 차이점에 대한 자세한 내용은 Durable Functions 버전 문서를 참조하세요.

비고

하위 오케스트레이션은 부모 오케스트레이션과 동일한 함수 앱에서 정의되어야 합니다. 다른 함수 앱에서 오케스트레이션을 호출하고 기다려야 하는 경우 HTTP API 및 HTTP 202 폴링 소비자 패턴에 대한 기본 지원 기능을 활용하는 것이 좋습니다. 자세한 내용은 HTTP 기능 항목을 참조하세요.

다음 단계