Bagikan melalui


Sub-orkestrasi dalam Durable Functions (Azure Functions)

Selain memanggil fungsi aktivitas, fungsi orkestrator dapat memanggil fungsi orkestrator lainnya. Misalnya, Anda dapat membuat orkestrasi yang lebih besar dari pustaka fungsi orkestrator yang lebih kecil. Atau, Anda dapat menjalankan beberapa instans fungsi orkestrator secara paralel.

Fungsi orkestrator dapat memanggil fungsi orkestrator lain menggunakan API "call-sub-orchestrator". Artikel Penanganan Kesalahan & Kompensasi memiliki informasi selengkapnya tentang coba lagi otomatis.

Fungsi sub-orkestrator berperilaku seperti fungsi aktivitas dari sudut pandang pemanggil. Fungsi ini dapat mengembalikan nilai, melempar pengecualian, dan dapat ditunggu oleh fungsi orkestrator induk.

Catatan

Sub-orkestrasi belum didukung di PowerShell.

Catatan

Model pemrograman Node.js versi 4 untuk Azure Functions umumnya tersedia. Model v4 baru dirancang untuk memiliki pengalaman yang lebih fleksibel dan intuitif untuk pengembang JavaScript dan TypeScript. Pelajari selengkapnya tentang perbedaan antara v3 dan v4 dalam panduan migrasi.

Dalam cuplikan kode berikut, JavaScript (PM4) menunjukkan model pemrograman V4, pengalaman baru.

Contoh

Contoh berikut mengilustrasikan skenario IoT ("Internet of Things") di mana ada beberapa perangkat yang perlu disediakan. Fungsi berikut mewakili alur kerja provisi yang perlu dijalankan untuk setiap perangkat:

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

Fungsi orkestrator ini dapat digunakan apa adanya untuk penyediaan perangkat satu kali atau dapat menjadi bagian dari orkestrasi yang lebih besar. Dalam kasus terakhir, fungsi orkestrator induk dapat menjadwalkan instans DeviceProvisioningOrchestration menggunakan API "call-sub-orchestrator".

Berikut adalah contoh yang menunjukkan cara menjalankan beberapa fungsi orkestrator secara paralel.

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

    // ...
}

Catatan

Contoh C# sebelumnya adalah untuk Durable Functions 2.x. Untuk Durable Functions 1.x, Anda harus menggunakan DurableOrchestrationContext dan bukan IDurableOrchestrationContext. Untuk informasi selengkapnya tentang perbedaan antara versi, lihat artikel Versi Durable Functions.

Catatan

Sub-orkestrasi harus ditentukan dalam aplikasi fungsi yang sama dengan orkestrasi induk. Jika Anda perlu memanggil dan menunggu orkestrasi di aplikasi fungsi lain, pertimbangkan untuk menggunakan dukungan bawaan untuk API HTTP dan pola konsumen polling HTTP 202. Untuk informasi selengkapnya, lihat topik Fitur HTTP.

Langkah berikutnya