Bagikan melalui


Pengikatan untuk Durable Functions (Azure Functions)

Ekstensi Durable Functions memperkenalkan dua pengikatan pemicu baru yang mengontrol eksekusi fungsi orkestrator dan aktivitas. Ekstensi ini juga memperkenalkan pengikatan output yang bertindak sebagai klien untuk runtime Durable Functions.

Pastikan untuk memilih bahasa pengembangan Durable Functions Anda di bagian atas artikel.

Penting

Artikel ini mendukung model pemrograman Python v1 dan Python v2 untuk Durable Functions.

Model pemrograman Python v2

Durable Functions didukung dalam model pemrograman Python v2 baru. Untuk menggunakan model v2, Anda harus menginstal Durable Functions SDK, yang merupakan paket azure-functions-durablePyPI, versi 1.2.2 , atau versi yang lebih baru. Anda juga harus memeriksa host.json untuk memastikan aplikasi Anda mereferensikan Bundel Ekstensi versi 4.x untuk menggunakan model v2 dengan Durable Functions.

Anda dapat memberikan umpan balik dan saran di Durable Functions SDK untuk repositori Python.

Pemicu orkestrasi

Pemicu orkestrasi memungkinkan Anda menulis fungsi orkestrator tahan lama. Pemicu ini dijalankan ketika instance orkestrasi baru dijadwalkan dan ketika instance orkestrasi yang ada menerima peristiwa. Contoh peristiwa yang dapat memicu fungsi orkestrator termasuk kedaluwarsa timer yang tahan lama, respons fungsi aktivitas, dan peristiwa yang diangkat oleh klien eksternal.

Ketika Anda menulis fungsi di .NET, pemicu orkestrasi dikonfigurasi menggunakan atribut OrchestrationTriggerAttribute .NET.

Untuk Java, @DurableOrchestrationTrigger anotasi digunakan untuk mengonfigurasi pemicu orkestrasi.

Saat Anda menulis fungsi orkestrator, pemicu orkestrasi ditentukan oleh objek JSON berikut dalam bindings array file function.json :

{
    "name": "<Name of input parameter in function signature>",
    "orchestration": "<Optional - name of the orchestration>",
    "type": "orchestrationTrigger",
    "direction": "in"
}
  • orchestration adalah nama orkestrasi yang harus digunakan klien saat mereka ingin memulai instans baru dari fungsi orkestrator ini. Properti ini bersifat opsional. Jika tidak ditentukan, nama fungsi digunakan.

Azure Functions mendukung dua model pemrograman untuk Python. Cara Anda menentukan pemicu orkestrasi tergantung pada model pemrograman yang Anda pilih.

Model pemrograman Python v2 memungkinkan Anda menentukan pemicu orkestrasi menggunakan orchestration_trigger dekorator langsung dalam kode fungsi Python Anda.

Dalam model v2, pemicu dan pengikatan Durable Functions diakses dari instans DFApp, yang merupakan subkelas dari FunctionApp yang juga mengekspor dekorator khusus Durable Functions.

Secara internal, ini memicu polling mengikat toko tahan lama yang dikonfigurasi untuk acara orkestrasi baru, seperti peristiwa mulai orkestrasi, peristiwa kedaluwarsa timer yang tahan lama, peristiwa respons fungsi aktivitas, dan peristiwa eksternal yang diangkat oleh fungsi lain.

Perilaku pemicu

Berikut beberapa catatan tentang pemicu orkestrasi:

  • Rangkaian tunggal - Rangkaian pengirim tunggal digunakan untuk semua eksekusi fungsi orkestrator di instans host tunggal. Untuk alasan ini, Anda perlu memastikan bahwa kode fungsi orkestrator efisien dan tidak melakukan I/O apa pun. Perlu dipastikan juga bahwa rangkaian ini tidak melakukan pekerjaan asinkron apa pun kecuali jika menunggu jenis tugas khusus Durable Functions.
  • Penanganan pesan racun - Tidak ada dukungan pesan racun dalam pemicu orkestrasi.
  • Visibilitas pesan - Pesan pemicu orkestrasi dikeluarkan dari antrean dan tetap tidak terlihat selama durasi yang dapat dikonfigurasi. Visibilitas pesan ini diperbarui otomatis selama aplikasi fungsi dijalankan dan sehat.
  • Nilai kembalian - Nilai kembalian diserialisasikan dengan JSON dan tetap ada dalam tabel riwayat orkestrasi di penyimpanan Azure Table. Nilai kembalian ini dapat dikueri melalui pengikatan klien orkestrasi, yang dijelaskan nanti.

Peringatan

Fungsi orkestrator tidak boleh menggunakan pengikatan input atau output selain pengikatan pemicu orkestrasi. Jika digunakan, akan timbul masalah dengan ekstensi Durable Task karena pengikatan tersebut mungkin tidak mematuhi aturan rangkaian tunggal dan I/O. Jika Anda ingin menggunakan pengikatan lain, tambahkan ke fungsi aktivitas yang dipanggil dari fungsi orkestrator Anda. Untuk informasi selengkapnya tentang pembatasan kode untuk fungsi orkestrator, lihat dokumentasi Batasan kode fungsi orkestrator.

Peringatan

Fungsi orkestrator tidak boleh dideklarasikan async.

Penggunaan pemicu

Pengikatan pemicu orkestrasi mendukung input dan output. Berikut beberapa hal yang perlu diketahui tentang penanganan input dan output:

  • input - Pemicu orkestrasi dapat dipanggil dengan input, yang diakses melalui objek input konteks. Semua input harus dapat diserialisasikan JSON.
  • output - Pemicu orkestrasi mendukung nilai output serta input. Nilai kembalian fungsi tersebut digunakan untuk menetapkan nilai dan harus dapat diserialisasikan JSON.

Contoh pemicu

Contok kode berikut menunjukkan tampilan fungsi orkestrator "Halo Dunia" yang paling sederhana. Perhatikan bahwa contoh orkestrator ini tidak benar-benar menjadwalkan tugas apa pun.

Atribut khusus yang digunakan untuk menentukan pemicu tergantung pada apakah Anda menjalankan fungsi C# Anda dalam proses atau dalam proses pekerja yang terisolasi.

[FunctionName("HelloWorld")]
public static string Run([OrchestrationTrigger] IDurableOrchestrationContext context)
{
    string name = context.GetInput<string>();
    return $"Hello {name}!";
}

Catatan

Kode 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.

const df = require("durable-functions");

module.exports = df.orchestrator(function*(context) {
    const name = context.df.getInput();
    return `Hello ${name}!`;
});

Catatan

Pustaka durable-functions menangani pemanggilan metode context.done sinkron saat fungsi generator keluar.

import azure.functions as func
import azure.durable_functions as df

myApp = df.DFApp(http_auth_level=func.AuthLevel.ANONYMOUS)

@myApp.orchestration_trigger(context_name="context")
def my_orchestrator(context):
    result = yield context.call_activity("Hello", "Tokyo")
    return result
param($Context)

$InputData = $Context.Input
$InputData
@FunctionName("HelloWorldOrchestration")
public String helloWorldOrchestration(
        @DurableOrchestrationTrigger(name = "ctx") TaskOrchestrationContext ctx) {
    return String.format("Hello %s!", ctx.getInput(String.class));
}

Sebagian besar fungsi orkestrator memanggil fungsi aktivitas, jadi di sini adalah contoh "Halo Dunia" yang menunjukkan cara memanggil fungsi aktivitas:

[FunctionName("HelloWorld")]
public static async Task<string> Run(
    [OrchestrationTrigger] IDurableOrchestrationContext context)
{
    string name = context.GetInput<string>();
    string result = await context.CallActivityAsync<string>("SayHello", name);
    return result;
}

Catatan

Kode 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.

const df = require("durable-functions");

module.exports = df.orchestrator(function*(context) {
    const name = context.df.getInput();
    const result = yield context.df.callActivity("SayHello", name);
    return result;
});
@FunctionName("HelloWorld")
public String helloWorldOrchestration(
        @DurableOrchestrationTrigger(name = "ctx") TaskOrchestrationContext ctx) {
    String input = ctx.getInput(String.class);
    String result = ctx.callActivity("SayHello", input, String.class).await();
    return result;
}

Pemicu aktivitas

Pemicu aktivitas memungkinkan Anda menulis fungsi yang dipanggil oleh fungsi orkestrator, yang dikenal sebagai fungsi aktivitas.

Pemicu aktivitas dikonfigurasi menggunakan atribut ActivityTriggerAttribute .NET.

Pemicu aktivitas dikonfigurasi menggunakan @DurableActivityTrigger anotasi.

Pemicu aktivitas didefinisikan oleh objek JSON berikut dalam bindings array function.json:

{
    "name": "<Name of input parameter in function signature>",
    "activity": "<Optional - name of the activity>",
    "type": "activityTrigger",
    "direction": "in"
}
  • activity adalah nama aktivitas. Nilai ini adalah nama yang digunakan fungsi orkestrator untuk memanggil fungsi aktivitas ini. Properti ini bersifat opsional. Jika tidak ditentukan, nama fungsi digunakan.

Cara Anda menentukan pemicu aktivitas tergantung pada model pemrograman yang Anda pilih.

activity_trigger Menggunakan dekorator langsung dalam kode fungsi Python Anda.

Secara internal, pemicu ini mengikat kumpulan penyimpanan tahan lama yang dikonfigurasi untuk peristiwa eksekusi aktivitas baru.

Perilaku pemicu

Berikut adalah beberapa catatan tentang pemicu aktivitas:

  • Rangkaian - Tidak seperti pemicu orkestrasi, pemicu aktivitas tidak memiliki pembatasan apa pun tentang rangkaian atau I/O. Fungsi ini dapat diperlakukan seperti fungsi biasa.
  • Penanganan pesan racun - Tidak ada dukungan pesan racun dalam pemicu aktivitas.
  • Visibilitas pesan - Pesan pemicu aktivitas dikeluarkan dari antrean dan tetap tidak dapat dilihat selama durasi yang tidak dapat dikonfigurasi. Visibilitas pesan ini diperbarui otomatis selama aplikasi fungsi dijalankan dan sehat.
  • Nilai pengembalian - Nilai pengembalian diserialisasikan ke JSON dan bertahan ke penyimpanan tahan lama yang dikonfigurasi.

Penggunaan pemicu

Pengikatan pemicu aktivitas mendukung input dan output, seperti halnya pemicu orkestrasi. Berikut beberapa hal yang perlu diketahui tentang penanganan input dan output:

  • input - Pemicu aktivitas dapat dipanggil dengan input dari fungsi orkestrator. Semua input harus dapat diserialisasikan JSON.
  • output - Fungsi aktivitas mendukung nilai output serta input. Nilai kembalian fungsi tersebut digunakan untuk menetapkan nilai dan harus dapat diserialisasikan JSON.
  • metadata - Fungsi aktivitas .NET dapat diikatkan ke parameter string instanceId untuk mendapatkan ID instans orkestrasi pemanggil.

Contoh pemicu

Contoh kode berikut menunjukkan seperti apa fungsi aktivitas sederhana SayHello .

[FunctionName("SayHello")]
public static string SayHello([ActivityTrigger] IDurableActivityContext helloContext)
{
    string name = helloContext.GetInput<string>();
    return $"Hello {name}!";
}

Jenis parameter default untuk pengikatan .NET ActivityTriggerAttribute adalah IDurableActivityContext (atau DurableActivityContext for Durable Functions v1). Namun, pemicu aktivitas .NET juga mendukung pengikatan langsung ke jenis JSON yang dapat diserialisasikan (termasuk jenis primitif), sehingga fungsi yang sama dapat disederhanakan sebagai berikut:

[FunctionName("SayHello")]
public static string SayHello([ActivityTrigger] string name)
{
    return $"Hello {name}!";
}
module.exports = async function(context) {
    return `Hello ${context.bindings.name}!`;
};

Pengikatan JavaScript juga dapat diteruskan sebagai parameter tambahan, sehingga fungsi yang sama dapat disederhanakan sebagai berikut:

module.exports = async function(context, name) {
    return `Hello ${name}!`;
};
import azure.functions as func
import azure.durable_functions as df

myApp = df.DFApp(http_auth_level=func.AuthLevel.ANONYMOUS)

@myApp.activity_trigger(input_name="myInput")
def my_activity(myInput: str):
    return "Hello " + myInput
param($name)

"Hello $name!"
@FunctionName("SayHello")
public String sayHello(@DurableActivityTrigger(name = "name") String name) {
    return String.format("Hello %s!", name);
}

Menggunakan pengikatan input dan output

Anda dapat menggunakan pengikatan input dan output reguler selain pengikatan pemicu aktivitas.

Misalnya, Anda dapat mengambil input ke pengikatan aktivitas Anda, dan mengirim pesan ke Pusat Aktivitas menggunakan pengikatan output Azure Event Hubs:

{
  "bindings": [
    {
      "name": "message",
      "type": "activityTrigger",
      "direction": "in"
    },
    {
      "type": "eventHub",
      "name": "outputEventHubMessage",
      "connection": "EventhubConnectionSetting",
      "eventHubName": "eh_messages",
      "direction": "out"
  }
  ]
}
module.exports = async function (context) {
    context.bindings.outputEventHubMessage = context.bindings.message;
};

Klien orkestrasi

Pengikatan klien orkestrasi memungkinkan Anda menulis fungsi yang berinteraksi dengan fungsi orkestrator. Fungsi ini terkadang disebut sebagai fungsi klien. Misalnya, Anda dapat menindaklanjuti instans orkestrasi dengan cara berikut:

  • Mulai.
  • Ajukan kueri statusnya.
  • Akhiri.
  • Kirim peristiwa ke fungsi tersebut saat sedang dijalankan.
  • Hapus menyeluruh riwayat instans.

Anda dapat mengikat klien orkestrasi dengan menggunakan atribut DurableClientAttribute (OrchestrationClientAttribute dalam Durable Functions v1.x).

Anda dapat mengikat klien orkestrasi dengan menggunakan @DurableClientInput anotasi.

Pemicu klien tahan lama didefinisikan oleh objek JSON berikut dalam bindings array function.json:

{
    "name": "<Name of input parameter in function signature>",
    "taskHub": "<Optional - name of the task hub>",
    "connectionName": "<Optional - name of the connection string app setting>",
    "type": "orchestrationClient",
    "direction": "in"
}
  • taskHub - Digunakan dalam skenario saat beberapa aplikasi fungsi berbagi akun penyimpanan yang sama, tetapi harus dipisahkan satu sama lain. Jika tidak ditentukan, nilai default dari host.json akan digunakan. Nilai ini harus cocok dengan nilai yang digunakan oleh fungsi orkestrator target.
  • connectionName - Nama pengaturan aplikasi yang berisi string koneksi akun penyimpanan. Akun penyimpanan yang diwakili oleh string koneksi ini harus sama dengan yang digunakan oleh fungsi orkestrator target. Jika tidak ditentukan, string koneksi akun penyimpanan default untuk aplikasi fungsi akan digunakan.

Catatan

Dalam kebanyakan kasus, sebaiknya Anda menghilangkan properti ini dan mengandalkan perilaku default.

Cara Anda menentukan pemicu klien yang tahan lama tergantung pada model pemrograman yang Anda pilih.

durable_client_input Menggunakan dekorator langsung dalam kode fungsi Python Anda.

Penggunaan klien

Anda biasanya mengikat IDurableClient (DurableOrchestrationClient di Durable Functions v1.x), yang memberi Anda akses penuh ke semua API klien orkestrasi yang didukung oleh Durable Functions.

Anda biasanya mengikat ke DurableClientContext kelas .

Anda harus menggunakan SDK khusus bahasa untuk mendapatkan akses ke objek klien.

Berikut adalah contoh fungsi yang dipicu antrean yang memulai orkestrasi "Halo Dunia".

[FunctionName("QueueStart")]
public static Task Run(
    [QueueTrigger("durable-function-trigger")] string input,
    [DurableClient] IDurableOrchestrationClient starter)
{
    // Orchestration input comes from the queue message content.
    return starter.StartNewAsync<string>("HelloWorld", input);
}

Catatan

Kode C# sebelumnya ditujukan untuk Durable Functions 2.x. Untuk Durable Functions 1.x, Anda harus menggunakan atribut OrchestrationClient, bukan atribut DurableClient, dan jenis parameter DurableOrchestrationClient, bukan IDurableOrchestrationClient. Untuk informasi selengkapnya tentang perbedaan antara versi, lihat artikel Versi Durable Functions.

function.json

{
  "bindings": [
    {
      "name": "input",
      "type": "queueTrigger",
      "queueName": "durable-function-trigger",
      "direction": "in"
    },
    {
      "name": "starter",
      "type": "durableClient",
      "direction": "in"
    }
  ]
}

index.js

const df = require("durable-functions");

module.exports = async function (context) {
    const client = df.getClient(context);
    return instanceId = await client.startNew("HelloWorld", undefined, context.bindings.input);
};

run.ps1

param([string] $input, $TriggerMetadata)

$InstanceId = Start-DurableOrchestration -FunctionName $FunctionName -Input $input
import azure.functions as func
import azure.durable_functions as df

myApp = df.DFApp(http_auth_level=func.AuthLevel.ANONYMOUS)

@myApp.route(route="orchestrators/{functionName}")
@myApp.durable_client_input(client_name="client")
async def durable_trigger(req: func.HttpRequest, client):
    function_name = req.route_params.get('functionName')
    instance_id = await client.start_new(function_name)
    response = client.create_check_status_response(req, instance_id)
    return response

function.json

{
  "bindings": [
    {
      "name": "input",
      "type": "queueTrigger",
      "queueName": "durable-function-trigger",
      "direction": "in"
    },
    {
      "name": "starter",
      "type": "durableClient",
      "direction": "in"
    }
  ]
}

run.ps1

param([string]$InputData, $TriggerMetadata)

$InstanceId = Start-DurableOrchestration -FunctionName 'HelloWorld' -Input $InputData
@FunctionName("QueueStart")
public void queueStart(
        @QueueTrigger(name = "input", queueName = "durable-function-trigger", connection = "Storage") String input,
        @DurableClientInput(name = "durableContext") DurableClientContext durableContext) {
    // Orchestration input comes from the queue message content.
    durableContext.getClient().scheduleNewOrchestrationInstance("HelloWorld", input);
}

Detail selengkapnya tentang cara memulai instans dapat ditemukan di Pengelolaan instans.

Pemicu entitas

Pemicu entitas memungkinkan Anda menulis fungsi entitas. Pemicu ini mendukung peristiwa pemrosesan untuk instans entitas tertentu.

Catatan

Pemicu entitas tersedia mulai dari Durable Functions 2.x.

Secara internal, ini memicu kumpulan pengikat penyimpanan tahan lama yang dikonfigurasi untuk operasi entitas baru yang perlu dijalankan.

Pemicu entitas dikonfigurasi menggunakan atribut EntityTriggerAttribute .NET.

Pemicu entitas ditentukan oleh objek JSON berikut dalam bindings array function.json:

{
    "name": "<Name of input parameter in function signature>",
    "entityName": "<Optional - name of the entity>",
    "type": "entityTrigger",
    "direction": "in"
}

Secara default, nama entitas adalah nama fungsi.

Catatan

Pemicu entitas belum didukung untuk Java.

Cara Anda menentukan pemicu entitas tergantung pada model pemrograman yang Anda pilih.

entity_trigger Menggunakan dekorator langsung dalam kode fungsi Python Anda.

Perilaku pemicu

Berikut beberapa catatan tentang pemicu entitas:

  • Berangkai tunggal: Rangkaian pengirim tunggal digunakan untuk memproses operasi untuk entitas tertentu. Jika beberapa pesan dikirim ke satu entitas secara bersamaan, beberapa operasi akan diproses sekaligus.
  • Penanganan pesan racun - Tidak ada dukungan pesan racun dalam pemicu entitas.
  • Visibilitas pesan - Pesan pemicu entitas dikeluarkan dari antrean dan tetap tidak terlihat selama durasi yang dapat dikonfigurasi. Visibilitas pesan ini diperbarui otomatis selama aplikasi fungsi dijalankan dan sehat.
  • Nilai pengembalian - Fungsi entitas tidak mendukung nilai pengembalian. Ada API tertentu yang dapat digunakan untuk menyimpan status atau meneruskan nilai kembali ke orkestrasi.

Setiap perubahan status yang dilakukan pada entitas selama eksekusinya akan secara otomatis dipertahankan setelah eksekusi selesai.

Untuk informasi dan contoh selengkapnya tentang mendefinisikan dan berinteraksi dengan pemicu entitas, lihat dokumentasi Entitas Tahan Lama.

Klien entitas

Pengikatan klien entitas memungkinkan Anda secara memicu fungsi entitas secara asinkron. Fungsi ini terkadang disebut sebagai fungsi klien.

Anda dapat mengikat klien entitas dengan menggunakan atribut DurableClientAttribute .NET dalam fungsi pustaka kelas .NET.

Catatan

[DurableClientAttribute] juga dapat digunakan untuk mengikat ke orkestrasi.

Klien entitas didefinisikan oleh objek JSON berikut dalam bindings array function.json:

{
    "name": "<Name of input parameter in function signature>",
    "taskHub": "<Optional - name of the task hub>",
    "connectionName": "<Optional - name of the connection string app setting>",
    "type": "durableClient",
    "direction": "in"
}
  • taskHub - Digunakan dalam skenario saat beberapa aplikasi fungsi berbagi akun penyimpanan yang sama, tetapi harus dipisahkan satu sama lain. Jika tidak ditentukan, nilai default dari host.json akan digunakan. Nilai ini harus cocok dengan nilai yang digunakan oleh fungsi entitas target.
  • connectionName - Nama pengaturan aplikasi yang berisi string koneksi akun penyimpanan. Akun penyimpanan yang diwakili oleh string koneksi ini harus sama dengan yang digunakan oleh fungsi entitas target. Jika tidak ditentukan, string koneksi akun penyimpanan default untuk aplikasi fungsi akan digunakan.

Catatan

Dalam kebanyakan kasus, sebaiknya Anda menghilangkan properti opsional dan mengandalkan perilaku default.

Cara Anda menentukan klien entitas tergantung pada model pemrograman yang Anda pilih.

durable_client_input Menggunakan dekorator langsung dalam kode fungsi Python Anda.

Catatan

Klien entitas belum didukung untuk Java.

Untuk informasi dan contoh selengkapnya tentang berinteraksi dengan entitas sebagai klien, lihat dokumentasi Entitas Tahan Lama.

Pengaturan host.json

Pengaturan konfigurasi untuk Fungsi Tahan Lama.

Catatan

Semua versi utama Fungsi Tahan Lama didukung pada semua versi runtime Azure Functions. Namun, skema konfigurasi host.json sedikit berbeda bergantung pada versi runtime Azure Functions dan versi ekstensi Fungsi Tahan Lama yang Anda gunakan. Contoh berikut digunakan dengan Azure Functions 2.0 dan 3.0. Dalam kedua contoh, jika Anda menggunakan Azure Functions 1.0, pengaturan yang tersedia sama, tetapi bagian “durableTask” dari host.json harus masuk ke akar konfigurasi host.json alih-alih sebagai bidang di bawah “ekstensi”.

{
 "extensions": {
  "durableTask": {
    "hubName": "MyTaskHub",
    "storageProvider": {
      "connectionStringName": "AzureWebJobsStorage",
      "controlQueueBatchSize": 32,
      "controlQueueBufferThreshold": 256,
      "controlQueueVisibilityTimeout": "00:05:00",
      "maxQueuePollingInterval": "00:00:30",
      "partitionCount": 4,
      "trackingStoreConnectionStringName": "TrackingStorage",
      "trackingStoreNamePrefix": "DurableTask",
      "useLegacyPartitionManagement": true,
      "useTablePartitionManagement": false,
      "workItemQueueVisibilityTimeout": "00:05:00",
    },
    "tracing": {
      "traceInputsAndOutputs": false,
      "traceReplayEvents": false,
    },
    "notifications": {
      "eventGrid": {
        "topicEndpoint": "https://topic_name.westus2-1.eventgrid.azure.net/api/events",
        "keySettingName": "EventGridKey",
        "publishRetryCount": 3,
        "publishRetryInterval": "00:00:30",
        "publishEventTypes": [
          "Started",
          "Completed",
          "Failed",
          "Terminated"
        ]
      }
    },
    "maxConcurrentActivityFunctions": 10,
    "maxConcurrentOrchestratorFunctions": 10,
    "extendedSessionsEnabled": false,
    "extendedSessionIdleTimeoutInSeconds": 30,
    "useAppLease": true,
    "useGracefulShutdown": false,
    "maxEntityOperationBatchSize": 50,
    "storeInputsInOrchestrationHistory": false
  }
 }
}

Nama hub tugas harus dimulai dengan huruf dan hanya terdiri atas huruf dan angka. Jika tidak ditentukan, nama hub tugas default untuk aplikasi fungsi adalah TestHubName. Untuk informasi selengkapnya, lihat Hub tugas.

Properti Default Deskripsi
hubName TestHubName (DurableFunctionsHub jika menggunakan Durable Functions 1.x) Nama hub tugas alternatif dapat digunakan untuk mengisolasi beberapa aplikasi Fungsi Tahan Lama satu sama lain, bahkan jika menggunakan backend penyimpanan yang sama.
controlQueueBatchSize 32 Jumlah pesan yang akan ditarik dari antrean kontrol sekaligus.
controlQueueBufferThreshold Paket konsumsi untuk Python: 32
Paket konsumsi untuk JavaScript dan C#: 128
Paket Khusus/Premium: 256
Jumlah pesan antrean kontrol yang dapat disangga dalam memori sekaligus, di mana saat itu dispatcher akan menunggu sebelum tidak mengantre pesan tambahan apa pun.
partitionCount 4 Jumlah partisi untuk antrean kontrol. Harus berupa bilangan bulat positif antara 1 dan 16.
controlQueueVisibilityTimeout 5 menit Batas waktu visibilitas pesan antrean kontrol yang tidak diantrekan.
workItemQueueVisibilityTimeout 5 menit Batas waktu visibilitas pesan antrean item kerja yang dihapus dari antrean.
maxConcurrentActivityFunctions Paket konsumsi: 10
Paket Dedicated/Premium: 10X jumlah prosesor pada mesin saat ini
Jumlah maksimum fungsi aktivitas yang dapat diproses secara bersamaan pada satu instans hosting.
maxConcurrentOrchestratorFunctions Paket konsumsi: 5
Paket Dedicated/Premium: 10X jumlah prosesor pada mesin saat ini
Jumlah maksimum fungsi orkestrator yang dapat diproses secara bersamaan pada satu instans hosting.
maxQueuePollingInterval 30 detik Kontrol maksimum dan interval polling antrean item kerja dalam format hh:mm:ss. Nilai yang lebih tinggi dapat mengakibatkan keterlambatan pemrosesan pesan yang lebih tinggi. Nilai yang lebih rendah dapat mengakibatkan biaya penyimpanan yang lebih tinggi karena peningkatan transaksi penyimpanan.
connectionName (2.7.0 dan yang lebih baru)
connectionStringName (2.x)
azureStorageConnectionStringName (1.x)
AzureWebJobsStorage Nama pengaturan aplikasi atau koleksi pengaturan yang menentukan cara terhubung ke sumber daya Azure Cosmos yang mendasarinya. Saat satu pengaturan aplikasi disediakan, itu harus menjadi string koneksi Azure Storage.
trackingStoreConnectionName (2.7.0 dan yang lebih baru)
trackingStoreConnectionStringName
Nama pengaturan aplikasi atau koleksi pengaturan yang menentukan cara tersambung ke tabel Riwayat dan Instans. Saat satu pengaturan aplikasi disediakan, itu harus menjadi string koneksi Azure Storage. Jika tidak ditentukan, koneksi connectionStringName (Tahan lama 2.x) atau azureStorageConnectionStringName (Tahan lama 1.x) digunakan.
trackingStoreNamePrefix Awalan yang digunakan untuk tabel Riwayat dan Instans ketika trackingStoreConnectionStringName ditentukan. Jika tidak diatur, nilai awalan default akan menjadi DurableTask. Jika trackingStoreConnectionStringName tidak ditentukan, maka tabel Riwayat dan Instans akan menggunakan nilai hubName sebagai awalannya, dan pengaturan untuk trackingStoreNamePrefix akan diabaikan.
traceInputsAndOutputs salah Nilai yang menunjukkan apakah akan melacak input dan output panggilan fungsi. Perilaku default saat menelusuri peristiwa eksekusi fungsi adalah memasukkan jumlah byte dalam input dan output berseri untuk panggilan fungsi. Perilaku ini memberikan informasi minimal tentang seperti apa input dan output tanpa mengasapi log atau secara tidak sengaja mengekspos informasi sensitif. Mengatur properti ini ke true menyebabkan pengelogan fungsi default untuk mencatat seluruh isi input dan output fungsi.
traceReplayEvents salah Nilai yang menunjukkan apakah akan menulis peristiwa pemutaran ulang orkestrasi ke Application Insights.
eventGridTopicEndpoint URL titik akhir topik kustom Azure Event Grid. Ketika properti ini ditetapkan, peristiwa pemberitahuan siklus hidup orkestrasi dipublikasikan ke titik akhir ini. Properti ini mendukung resolusi Pengaturan Aplikasi.
eventGridKeySettingName Nama pengaturan aplikasi yang berisi kunci yang digunakan untuk mengautentikasi dengan topik kustom Azure Event Grid di EventGridTopicEndpoint.
eventGridPublishRetryCount 0 Berapa kali untuk mencoba kembali jika penerbitan ke Topik Event Grid gagal.
eventGridPublishRetryInterval 5 menit Event Grid menerbitkan interval coba lagi dalam format hh:mm:ss.
eventGridPublishEventTypes Daftar jenis peristiwa untuk diterbitkan ke Event Grid. Jika tidak ditentukan, semua jenis peristiwa akan diterbitkan. Nilai yang diperbolehkan mencakup Started, Completed, Failed, Terminated.
useAppLease benar Saat diatur ke true, aplikasi akan memerlukan memperoleh sewa blob tingkat aplikasi sebelum memproses pesan hub tugas. Untuk informasi selengkapnya, lihat dokumentasi pemulihan bencana dan distribusi geografis. Tersedia mulai dari v2.3.0.
useLegacyPartitionManagement salah Ketika diatur ke false, menggunakan algoritma manajemen partisi yang mengurangi kemungkinan eksekusi fungsi duplikat saat peluasan skala. Tersedia mulai v2.3.0.
useTablePartitionManagement salah Saat diatur ke true, menggunakan algoritma manajemen partisi yang dirancang untuk mengurangi biaya untuk akun Azure Storage V2. Tersedia mulai dari v2.10.0. Fitur ini saat ini dalam pratinjau dan belum kompatibel dengan paket Konsumsi.
useGracefulShutdown salah (Pratinjau) Aktifkan matikan dengan anggun untuk mengurangi kemungkinan matikan hosting gagal dalam proses eksekusi fungsi.
maxEntityOperationBatchSize(2.6.1) Paket konsumsi: 50
Paket Khusus/Premium: 5000
Jumlah maksimum operasi entitas yang diproses sebagai batch. Jika diatur ke 1, pembuatan batch dinonaktifkan, dan setiap pesan operasi diproses oleh pemanggilan fungsi terpisah.
storeInputsInOrchestrationHistory salah Saat diatur ke true, memberi tahu Kerangka Kerja Tugas Tahan Lama untuk menyimpan input aktivitas dalam tabel riwayat. Ini memungkinkan penayangan input fungsi aktivitas saat mengkueri riwayat orkestrasi.

Banyak dari pengaturan ini untuk mengoptimalkan performa. Untuk informasi selengkapnya, lihat Performa dan skala.

Langkah berikutnya