Partager via


Orchestrations secondaires dans Durable Functions (Azure Functions)

En plus d’appeler des fonctions d’activité, les fonctions d’orchestrateur peuvent appeler d’autres fonctions d’orchestrateur. Par exemple, vous pouvez créer une orchestration plus grande à partir d’une bibliothèque de fonctions d’orchestrateur plus petites. Vous pouvez également exécuter plusieurs instances d’une fonction d’orchestrateur en parallèle.

Une fonction d’orchestrateur peut appeler une autre fonction d’orchestrateur à l’aide de l’API « call-sub-orchestrator ». L’article Gestion des erreurs et compensation contient plus d’informations sur les nouvelles tentatives automatiques.

Les fonctions d’orchestrateur secondaires se comportent comme des fonctions d’activité du point de vue de l’appelant. Elles peuvent renvoyer une valeur et lever une exception, car la fonction d’orchestrateur parent les anticipe.

Remarque

Dans PowerShell, les sous-orchestrations sont prises en charge dans le Kit de développement logiciel (SDK) autonome uniquement : AzureFunctions.PowerShell.Durable.SDK. Découvrez la différence entre le KIT de développement logiciel (SDK) autonome et le SDK intégré hérité, ainsi que le guide de migration.

Remarque

La version 4 du modèle de programmation Node.js pour Azure Functions est en disponibilité générale. Le modèle v4 est conçu pour offrir une expérience plus flexible et intuitive pour les développeurs JavaScript et TypeScript. Pour plus d’informations sur les différences entre v3 et v4, consultez le guide de migration.

Dans les extraits de code suivants, JavaScript (PM4) désigne le modèle de programmation v4, la nouvelle expérience.

Exemple :

L’exemple suivant illustre un scénario IoT (« Internet des objets ») dans lequel plusieurs appareils doivent être provisionnés. La fonction suivante représente le flux de travail d’approvisionnement qui doit être exécuté pour chaque appareil :

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

Cette fonction d’orchestrateur peut être utilisée as-is pour l’approvisionnement d’appareils unique ou faire partie d’une orchestration plus grande. Dans ce dernier cas, la fonction d'orchestrateur parent peut planifier des instances de DeviceProvisioningOrchestration en utilisant l'API « call-sub-orchestrator ».

L’exemple suivant montre comment exécuter plusieurs fonctions d’orchestrateur en même temps :

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

    // ...
}

Remarque

Les exemples C# précédents portent sur Durable Functions 2.x. Pour Durable Functions 1.x, vous devez utiliser DurableOrchestrationContext au lieu de IDurableOrchestrationContext. Pour plus d’informations sur les différences entre les versions, consultez l’article Durable Functions versions.

Remarque

Les sous-orchestrations doivent être définies dans la même application de fonction que l’orchestration parente. Si vous avez besoin d’appeler et d’attendre des orchestrations dans une autre application de fonction, envisagez d’utiliser la prise en charge intégrée des API HTTP et le modèle d’interrogation de consommateur HTTP 202. Pour plus d’informations, consultez la rubrique Fonctionnalités HTTP .

Étapes suivantes