Dayanıklı İşlevler bağlamaları (Azure İşlevleri)

Dayanıklı İşlevler uzantısı orchestrator, entity ve activity işlevlerinin yürütülmesini denetleen üç tetikleyici bağlaması getirir. Ayrıca, Dayanıklı İşlevler çalışma zamanı için istemci işlevi gören bir çıkış bağlaması da tanıtır.

Makalenin üst kısmında Dayanıklı İşlevler geliştirme dilinizi seçtiğinizden emin olun.

Önemli

Bu makale, Dayanıklı İşlevler için hem Python v1 hem de Python v2 programlama modellerini destekler.

Python v2 programlama modeli

Dayanıklı İşlevler yeni sürümde desteklenirPython v2 programlama modeli. v2 modelini kullanmak için PyPI paketiazure-functions-durable, sürümü veya sonraki bir sürüm 1.2.2 olan Dayanıklı İşlevler SDK'sını yüklemeniz gerekir. Ayrıca host.json uygulamanızın Dayanıklı İşlevler ile v2 modelini kullanmak için Uzantı Paketleri sürüm 4.x'e başvurup başvurmadığından emin olmanız gerekir.

Python deposu için Dayanıklı İşlevler SDK'sında geri bildirim ve öneriler sağlayabilirsiniz.

Düzenleme tetikleyicisi

Düzenleme tetikleyicisi, dayanıklı düzenleyici işlevleri yazmanızı sağlar. Bu tetikleyici, yeni bir düzenleme örneği zamanlandığında ve mevcut bir düzenleme örneği bir olay aldığında yürütülür. Orchestrator işlevlerini tetikleyebilen olaylara örnek olarak dayanıklı süre sonu süreleri, etkinlik işlevi yanıtları ve dış istemciler tarafından tetiklenen olaylar verilebilir.

.NET'te işlevler yazdığınızda, orchestration tetikleyicisi OrchestrationTriggerAttribute .NET özniteliği kullanılarak yapılandırılır.

Java için ek açıklama düzenleme @DurableOrchestrationTrigger tetikleyicisini yapılandırmak için kullanılır.

Orchestrator işlevleri yazdığınızda, düzenleme tetikleyicisi function.json dosyasının bindingsdizisindeki aşağıdaki JSON nesnesi tarafından tanımlanır:

{
    "name": "<Name of input parameter in function signature>",
    "orchestration": "<Optional - name of the orchestration>",
    "type": "orchestrationTrigger",
    "direction": "in"
}
  • orchestration , istemcilerin bu orchestrator işlevinin yeni örneklerini başlatmak istediklerinde kullanması gereken düzenlemenin adıdır. Bu özellik isteğe bağlıdır. Belirtilmezse işlevin adı kullanılır.

Azure İşlevleri, Python için iki programlama modelini destekler. Düzenleme tetikleyicisi tanımlama şekliniz, seçtiğiniz programlama modeline bağlıdır.

Python v2 programlama modeli, doğrudan Python işlev kodunuzda dekoratör kullanarak orchestration_trigger bir düzenleme tetikleyicisi tanımlamanızı sağlar.

v2 modelinde, Dayanıklı İşlevler tetikleyicilerine ve bağlamalarına, ek olarak Dayanıklı İşlevler özel dekoratörleri dışarı aktaran bir alt sınıfı FunctionApp olan örneğinden DFApperişilir.

Dahili olarak, bu tetikleyici bağlaması düzenleme başlatma olayları, dayanıklı süre sonu olayları, etkinlik işlevi yanıt olayları ve diğer işlevler tarafından tetiklenen dış olaylar gibi yeni düzenleme olayları için yapılandırılmış dayanıklı depoyu yoklar.

Tetikleyici davranışı

Düzenleme tetikleyicisi hakkında bazı notlar şunlardır:

  • Tek iş parçacığı oluşturma - Tek bir konak örneğinde tüm orchestrator işlev yürütmesi için tek bir dağıtıcı iş parçacığı kullanılır. Bu nedenle orchestrator işlev kodunun verimli olduğundan ve hiçbir G/Ç gerçekleştirmediğinden emin olmak önemlidir. Ayrıca, bu iş parçacığının belirli Dayanıklı İşlevler görev türlerini beklerken dışında zaman uyumsuz bir çalışma yapmadığından emin olmak da önemlidir.
  • Zehirli ileti işleme - Düzenleme tetikleyicilerinde zehirli ileti desteği yoktur.
  • İleti görünürlüğü - Düzenleme tetikleyici iletileri sıralanır ve yapılandırılabilir bir süre boyunca görünmez durumda tutulur. İşlev uygulaması çalıştığı ve iyi durumda olduğu sürece bu iletilerin görünürlüğü otomatik olarak yenilenir.
  • Dönüş değerleri - Dönüş değerleri JSON olarak serileştirilir ve Azure Tablo depolama alanında düzenleme geçmişi tablosunda kalıcı hale getirilir. Bu dönüş değerleri daha sonra açıklanan düzenleme istemci bağlaması tarafından sorgulanabilir.

Uyarı

Orchestrator işlevleri hiçbir zaman orchestration tetikleyici bağlaması dışında herhangi bir giriş veya çıkış bağlaması kullanmamalıdır. Bu bağlamalar tek iş parçacığı oluşturma ve G/Ç kurallarına uymayabileceği için bunu yapmak Dayanıklı Görev uzantısıyla ilgili sorunlara neden olabilir. Diğer bağlamaları kullanmak isterseniz, bunları orchestrator işlevinizden çağrılan bir etkinlik işlevine ekleyin. Orchestrator işlevleri için kodlama kısıtlamaları hakkında daha fazla bilgi için Orchestrator işlev kodu kısıtlamaları belgelerine bakın.

Uyarı

Orchestrator işlevleri hiçbir zaman bildirilmemelidir async.

Kullanımı tetikleme

Düzenleme tetikleyicisi bağlaması hem girişleri hem de çıkışları destekler. Giriş ve çıkış işleme hakkında bilmeniz gereken bazı şeyler şunlardır:

  • inputs - Düzenleme tetikleyicileri, bağlam giriş nesnesi aracılığıyla erişilen girişlerle çağrılabilir. Tüm girişler JSON serileştirilebilir olmalıdır.
  • outputs - Orchestration tetikleyicileri hem çıkış değerlerini hem de girişleri destekler. İşlevin dönüş değeri, çıkış değerini atamak için kullanılır ve JSON serileştirilebilir olmalıdır.

Tetikleyici örneği

Aşağıdaki örnek kod, en basit "Merhaba Dünya" düzenleyici işlevinin nasıl görünebileceğini gösterir. Bu örnek düzenleyicinin aslında hiçbir görev zamanlamadığını unutmayın.

Tetikleyiciyi tanımlamak için kullanılan belirli öznitelik, C# işlevlerinizi çalışırken mi yoksa yalıtılmış bir çalışan işleminde mi çalıştırdığınıza bağlıdır.

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

Not

Önceki kod Dayanıklı İşlevler 2.x içindir. Dayanıklı İşlevler 1.x için yerine IDurableOrchestrationContextkullanmanız DurableOrchestrationContext gerekir. Sürümler arasındaki farklar hakkında daha fazla bilgi için Dayanıklı İşlevler Sürümleri makalesine bakın.

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

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

Not

Kitaplık, durable-functions oluşturucu işlevi çıktığında zaman uyumlu context.done yöntemi çağırmayı üstlenir.

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

Düzenleyici işlevlerinin çoğu etkinlik işlevlerini çağırdığından, bir etkinlik işlevinin nasıl çağrıldığını gösteren bir "Merhaba Dünya" örneği aşağıda verilmiştir:

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

Not

Önceki kod Dayanıklı İşlevler 2.x içindir. Dayanıklı İşlevler 1.x için yerine IDurableOrchestrationContextkullanmanız DurableOrchestrationContext gerekir. Sürümler arasındaki farklar hakkında daha fazla bilgi için Dayanıklı İşlevler sürümleri makalesine bakın.

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;
}

Etkinlik tetikleyicisi

Etkinlik tetikleyicisi, etkinlik işlevleri olarak bilinen orchestrator işlevleri tarafından çağrılan işlevleri yazmanızı sağlar.

Etkinlik tetikleyicisi ActivityTriggerAttribute .NET özniteliği kullanılarak yapılandırılır.

Etkinlik tetikleyicisi ek açıklama kullanılarak @DurableActivityTrigger yapılandırılır.

Etkinlik tetikleyicisi, function.json dizisinde bindingsaşağıdaki JSON nesnesi tarafından tanımlanır:

{
    "name": "<Name of input parameter in function signature>",
    "activity": "<Optional - name of the activity>",
    "type": "activityTrigger",
    "direction": "in"
}
  • activity etkinliğin adıdır. Bu değer, orchestrator işlevlerinin bu etkinlik işlevini çağırmak için kullandığı addır. Bu özellik isteğe bağlıdır. Belirtilmezse işlevin adı kullanılır.

Etkinlik tetikleyicisi tanımlama şekliniz, seçtiğiniz programlama modeline bağlıdır.

activity_trigger Doğrudan Python işlev kodunuzda dekoratör kullanma.

Dahili olarak, bu tetikleyici bağlaması yeni etkinlik yürütme olayları için yapılandırılmış dayanıklı depoyu yoklar.

Tetikleyici davranışı

Etkinlik tetikleyicisi hakkında bazı notlar şunlardır:

  • İş Parçacığı Oluşturma - Düzenleme tetikleyicisinin aksine, etkinlik tetikleyicilerinin iş parçacığı veya G/Ç ile ilgili herhangi bir kısıtlaması yoktur. Bunlar normal işlevler gibi ele alınabilir.
  • Zehirli ileti işleme - Etkinlik tetikleyicilerinde zehirli ileti desteği yoktur.
  • İleti görünürlüğü - Etkinlik tetikleyici iletileri sıralanır ve yapılandırılabilir bir süre boyunca görünmez durumda tutulur. İşlev uygulaması çalıştığı ve iyi durumda olduğu sürece bu iletilerin görünürlüğü otomatik olarak yenilenir.
  • Dönüş değerleri - Dönüş değerleri JSON olarak serileştirilir ve yapılandırılan dayanıklı depoda kalıcı hale getirilir.

Kullanımı tetikleme

Etkinlik tetikleyicisi bağlaması, düzenleme tetikleyicisi gibi hem girişleri hem de çıkışları destekler. Giriş ve çıkış işleme hakkında bilmeniz gereken bazı şeyler şunlardır:

  • inputs - Etkinlik tetikleyicileri bir orchestrator işlevindeki girişlerle çağrılabilir. Tüm girişler JSON serileştirilebilir olmalıdır.
  • outputs - Etkinlik işlevleri hem çıkış değerlerini hem de girişleri destekler. İşlevin dönüş değeri, çıkış değerini atamak için kullanılır ve JSON serileştirilebilir olmalıdır.
  • metadata - .NET etkinlik işlevleri, çağrı düzenlemesinin örnek kimliğini almak için bir string instanceId parametreye bağlanabilir.

Tetikleyici örneği

Aşağıdaki örnek kod, basit SayHello bir etkinlik işlevinin nasıl görünebileceğini gösterir.

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

.NET ActivityTriggerAttribute bağlaması için varsayılan parametre türü IDurableActivityContext (veya Dayanıklı İşlevler v1 için DurableActivityContext) parametresidir. Bununla birlikte, .NET etkinlik tetikleyicileri doğrudan JSON seri hale getirilebilir türler (ilkel türler dahil) bağlamayı da destekler, bu nedenle aynı işlev aşağıdaki gibi basitleştirilebilir:

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

JavaScript bağlamaları ek parametreler olarak da geçirilebilir, bu nedenle aynı işlev aşağıdaki gibi basitleştirilebilir:

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

Giriş ve çıkış bağlamalarını kullanma

Etkinlik tetikleyicisi bağlamasına ek olarak normal giriş ve çıkış bağlamalarını da kullanabilirsiniz.

Örneğin, etkinlik bağlamanızın girişini alabilir ve Event Hubs çıkış bağlamasını kullanarak bir Olay Hub'ına ileti gönderebilirsiniz:

{
  "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;
};

Orchestration istemcisi

Düzenleme istemci bağlaması, orchestrator işlevleriyle etkileşim kuran işlevler yazmanızı sağlar. Bu işlevler genellikle istemci işlevleri olarak adlandırılır. Örneğin, düzenleme örnekleri üzerinde aşağıdaki yollarla işlem yapabilirsiniz:

  • Onları başlatın.
  • Durumlarını sorgula.
  • Onları sonlandır.
  • Çalışırken olayları onlara gönderin.
  • Örnek geçmişini temizleme.

DurableClientAttribute özniteliğini (Dayanıklı İşlevler v1.x'te OrchestrationClientAttribute) kullanarak düzenleme istemcisine bağlanabilirsiniz.

Ek açıklamayı kullanarak düzenleme istemcisine @DurableClientInput bağlanabilirsiniz.

Dayanıklı istemci tetikleyicisi, function.json dizisinde bindingsaşağıdaki JSON nesnesi tarafından tanımlanır:

{
    "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 - Birden çok işlev uygulamasının aynı depolama hesabını paylaştığı ancak birbirinden yalıtılması gereken senaryolarda kullanılır. Belirtilmezse, varsayılan host.json değeri kullanılır. Bu değer, hedef düzenleyici işlevleri tarafından kullanılan değerle eşleşmelidir.
  • connectionName- Depolama hesabı içeren bir uygulama ayarının adı bağlantı dizesi. Bu bağlantı dizesi temsil edilen depolama hesabı, hedef düzenleyici işlevleri tarafından kullanılanla aynı olmalıdır. Belirtilmezse, işlev uygulaması için varsayılan depolama hesabı bağlantı dizesi kullanılır.

Not

Çoğu durumda, bu özellikleri atlayıp varsayılan davranışa güvenmenizi öneririz.

Dayanıklı bir istemci tetikleyicisi tanımlama şekliniz, seçtiğiniz programlama modeline bağlıdır.

durable_client_input Doğrudan Python işlev kodunuzda dekoratör kullanma.

İstemci kullanımı

Genellikle Dayanıklı İşlevler tarafından desteklenen tüm düzenleme istemci API'lerine tam erişim sağlayan IDurableClient'a (Dayanıklı İşlevler v1.x'te DurableOrchestrationClient) bağlanırsınız.

Genellikle sınıfına DurableClientContext bağlanırsınız.

İstemci nesnesine erişim elde etmek için dile özgü SDK'sını kullanmanız gerekir.

"HelloWorld" düzenlemesini başlatan kuyruk ile tetiklenen bir işlev örneği aşağıda verilmiştir.

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

Not

Önceki C# kodu Dayanıklı İşlevler 2.x içindir. Dayanıklı İşlevler 1.x için özniteliği OrchestrationClient yerine DurableClient özniteliğini ve yerine IDurableOrchestrationClientparametre türünü kullanmanız DurableOrchestrationClient gerekir. Sürümler arasındaki farklar hakkında daha fazla bilgi için Dayanıklı İşlevler Sürümleri makalesine bakın.

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

Örnekleri başlatma hakkında daha fazla bilgi Örnek yönetimi bölümünde bulunabilir.

Varlık tetikleyicisi

Varlık tetikleyicileri, varlık işlevlerini yazmanıza olanak sağlar. Bu tetikleyici, belirli bir varlık örneği için olayları işlemeyi destekler.

Not

Varlık tetikleyicileri Dayanıklı İşlevler 2.x ile başlayarak kullanılabilir.

Dahili olarak bu tetikleyici bağlaması, yürütülmesi gereken yeni varlık işlemleri için yapılandırılmış dayanıklı depoyu yoklar.

Varlık tetikleyicisi EntityTriggerAttribute .NET özniteliği kullanılarak yapılandırılır.

Varlık tetikleyicisi, function.json dizisinde bindingsaşağıdaki JSON nesnesi tarafından tanımlanır:

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

Varsayılan olarak, bir varlığın adı işlevin adıdır.

Not

Varlık tetikleyicileri henüz Java için desteklenmemektedir.

Varlık tetikleyicisi tanımlama şekliniz, seçtiğiniz programlama modeline bağlıdır.

entity_trigger Doğrudan Python işlev kodunuzda dekoratör kullanma.

Tetikleyici davranışı

Varlık tetikleyicisi hakkında bazı notlar şunlardır:

  • Tek iş parçacıklı: Belirli bir varlığın işlemlerini işlemek için tek bir dağıtıcı iş parçacığı kullanılır. Aynı anda tek bir varlığa birden çok ileti gönderilirse, işlemler birer birer işlenir.
  • Zehirli ileti işleme - Varlık tetikleyicilerinde zehirli ileti desteği yoktur.
  • İleti görünürlüğü - Varlık tetikleyici iletileri sıralanır ve yapılandırılabilir bir süre boyunca görünmez durumda tutulur. İşlev uygulaması çalıştığı ve iyi durumda olduğu sürece bu iletilerin görünürlüğü otomatik olarak yenilenir.
  • Dönüş değerleri - Varlık işlevleri dönüş değerlerini desteklemez. Durumu kaydetmek veya değerleri düzenlemelere geri geçirmek için kullanılabilecek belirli API'ler vardır.

Yürütme sırasında bir varlığa yapılan durum değişiklikleri, yürütme tamamlandıktan sonra otomatik olarak kalıcı hale getirilecektir.

Varlık tetikleyicilerini tanımlama ve bunlarla etkileşim kurma hakkında daha fazla bilgi ve örnek için Dayanıklı Varlıklar belgelerine bakın.

Varlık istemcisi

Varlık istemci bağlaması, varlık işlevlerini zaman uyumsuz olarak tetiklemenizi sağlar. Bu işlevler bazen istemci işlevleri olarak adlandırılır.

.NET sınıf kitaplığı işlevlerinde DurableClientAttribute .NET özniteliğini kullanarak varlık istemcisine bağlanabilirsiniz.

Not

, [DurableClientAttribute] orchestration istemcisine bağlanmak için de kullanılabilir.

Varlık istemcisi, function.json dizisinde bindingsaşağıdaki JSON nesnesi tarafından tanımlanır:

{
    "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 - Birden çok işlev uygulamasının aynı depolama hesabını paylaştığı ancak birbirinden yalıtılması gereken senaryolarda kullanılır. Belirtilmezse, varsayılan host.json değeri kullanılır. Bu değer, hedef varlık işlevleri tarafından kullanılan değerle eşleşmelidir.
  • connectionName- Depolama hesabı içeren bir uygulama ayarının adı bağlantı dizesi. Bu bağlantı dizesi temsil edilen depolama hesabı, hedef varlık işlevleri tarafından kullanılanla aynı olmalıdır. Belirtilmezse, işlev uygulaması için varsayılan depolama hesabı bağlantı dizesi kullanılır.

Not

Çoğu durumda, isteğe bağlı özellikleri atlayıp varsayılan davranışa güvenmenizi öneririz.

Varlık istemcisini tanımlama şekliniz, seçtiğiniz programlama modeline bağlıdır.

durable_client_input Doğrudan Python işlev kodunuzda dekoratör kullanma.

Not

Varlık istemcileri henüz Java için desteklenmiyor.

İstemci olarak varlıklarla etkileşim kurma hakkında daha fazla bilgi ve örnek için Dayanıklı Varlıklar belgelerine bakın.

host.json ayarları

Dayanıklı İşlevler yapılandırma ayarları.

Not

Dayanıklı İşlevler tüm ana sürümleri Azure İşlevleri çalışma zamanının tüm sürümlerinde desteklenir. Ancak, host.json yapılandırmasının şeması, Azure İşlevleri çalışma zamanının sürümüne ve kullandığınız Dayanıklı İşlevler uzantı sürümüne bağlı olarak biraz farklıdır. Aşağıdaki örnekler Azure İşlevleri 2.0 ve 3.0 ile kullanıma yöneliktir. Her iki örnekte de, Azure İşlevleri 1.0 kullanıyorsanız, kullanılabilir ayarlar aynıdır, ancak host.json "durableTask" bölümü "uzantılar" altındaki bir alan yerine host.json yapılandırmasının köküne girmelidir.

{
 "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
  }
 }
}

Görev hub'ı adları bir harfle başlamalı ve yalnızca harf ve sayılardan oluşmalıdır. Belirtilmezse, bir işlev uygulamasının varsayılan görev hub'ı adı TestHubName'dir. Daha fazla bilgi için bkz . Görev hub'ları.

Özellik Varsayılan Açıklama
hubName TestHubName (Dayanıklı İşlevler 1.x kullanıyorsanız DurableFunctionsHub) Alternatif görev hub'ı adları, aynı depolama arka ucu kullanıyor olsalar bile birden çok Dayanıklı İşlevler uygulamasını birbirinden yalıtmak için kullanılabilir.
controlQueueBatchSize 32 Bir kerede denetim kuyruğundan çekecek iletilerin sayısı.
controlQueueBufferThreshold Python için tüketim planı: 32
JavaScript ve C# için tüketim planı: 128
Ayrılmış/Premium plan: 256
Bir kerede bellekte arabelleğe alınabilen denetim kuyruğu iletilerinin sayısıdır. Bu noktada dağıtıcı, ek iletilerin sorgulanmasını beklemeden önce bekler.
partitionCount 4 Denetim kuyruğunun bölüm sayısı. 1 ile 16 arasında pozitif bir tamsayı olabilir.
controlQueueVisibilityTimeout 5 dakika Sıralanmamış denetim kuyruğu iletilerinin görünürlük zaman aşımı.
workItemQueueVisibilityTimeout 5 dakika Sıralanmamış iş öğesi kuyruk iletilerinin görünürlük zaman aşımı.
maxConcurrentActivityFunctions Tüketim planı: 10
Ayrılmış/Premium plan: Geçerli makinedeki işlemci sayısının 10 katını
Tek bir konak örneğinde eşzamanlı olarak işlenebilen en fazla etkinlik işlevi sayısı.
maxConcurrentOrchestratorFunctions Tüketim planı: 5
Ayrılmış/Premium plan: Geçerli makinedeki işlemci sayısının 10 katını
Tek bir konak örneğinde eşzamanlı olarak işlenebilen en fazla orchestrator işlevi sayısı.
maxQueuePollingInterval 30 saniye hh:mm:ss biçimindeki en yüksek denetim ve iş öğesi kuyruğu yoklama aralığı. Daha yüksek değerler daha yüksek ileti işleme gecikmelerine neden olabilir. Daha düşük değerler, artan depolama işlemleri nedeniyle daha yüksek depolama maliyetlerine neden olabilir.
connectionName (2.7.0 ve üzeri)
connectionStringName (2.x)
azure Depolama Bağlan ionStringName (1.x)
AzureWebJobsStorage Temel alınan Azure Depolama kaynaklarına nasıl bağlanıldığını belirten bir uygulama ayarının veya ayar koleksiyonunun adı. Tek bir uygulama ayarı sağlandığında, bu bir Azure Depolama bağlantı dizesi olmalıdır.
trackingStore Bağlan ionName (2.7.0 ve üzeri)
trackingStore Bağlan ionStringName
Geçmiş ve Örnekler tablolarına nasıl bağlanıldığını belirten bir uygulama ayarının veya ayar koleksiyonunun adı. Tek bir uygulama ayarı sağlandığında, bu bir Azure Depolama bağlantı dizesi olmalıdır. Belirtilmezse, connectionStringName (Dayanıklı 2.x) veya azureStorageConnectionStringName (Dayanıklı 1.x) bağlantısı kullanılır.
trackingStoreNamePrefix Belirtildiğinde trackingStoreConnectionStringName Geçmiş ve Örnekler tabloları için kullanılacak ön ek. Ayarlanmadıysa, varsayılan ön ek değeri olur DurableTask. Belirtilmezse trackingStoreConnectionStringName , Geçmiş ve Örnekler tabloları ön ek olarak değerini kullanır hubName ve için trackingStoreNamePrefix herhangi bir ayar yoksayılır.
traceInputsAndOutputs yanlış İşlev çağrılarının girişlerinin ve çıkışlarının izlenip izlenmeyeceğini gösteren bir değer. İşlev yürütme olaylarını izlerken varsayılan davranış, işlev çağrıları için serileştirilmiş girişlere ve çıkışlara bayt sayısını eklemektir. Bu davranış, günlükleri şişirmeden veya yanlışlıkla hassas bilgileri açığa çıkarmadan girişlerin ve çıkışların nasıl göründüğü hakkında en az bilgi sağlar. Bu özelliğin true olarak ayarlanması, varsayılan işlev günlüğünün işlev girişlerinin ve çıkışlarının tüm içeriğini günlüğe kaydetmesine neden olur.
traceReplayEvents yanlış Application Analizler'a orchestration replay olaylarının yazılıp yazılmayacağını gösteren değer.
eventGridTopicEndpoint Azure Event Grid özel konu uç noktasının URL'si. Bu özellik ayarlandığında, düzenleme yaşam döngüsü bildirim olayları bu uç noktada yayımlanır. Bu özellik, Uygulama Ayarlar çözümlemesini destekler.
eventGridKeySettingName konumundaki EventGridTopicEndpointAzure Event Grid özel konusuyla kimlik doğrulaması için kullanılan anahtarı içeren uygulama ayarının adı.
eventGridPublishRetryCount 0 Event Grid Konusu'na yayımlama başarısız olursa yeniden deneme sayısı.
eventGridPublishRetryInterval 5 dakika Event Grid yeniden deneme aralığını hh:mm:ss biçiminde yayımlar .
eventGridPublishEventTypes Event Grid'de yayımlayacak olay türlerinin listesi. Belirtilmezse, tüm olay türleri yayımlanır. İzin verilen değerler , Started, Completed, Failed. Terminated
useAppLease true olarak trueayarlandığında, uygulamalar görev hub'ı iletilerini işlemeden önce uygulama düzeyinde blob kirası alma gerektirir. Daha fazla bilgi için olağanüstü durum kurtarma ve coğrafi dağıtım belgelerine bakın. v2.3.0'dan itibaren kullanılabilir.
useLegacyPartitionManagement yanlış olarak falseayarlandığında, ölçeği genişletirken yinelenen işlev yürütme olasılığını azaltan bir bölüm yönetimi algoritması kullanır. v2.3.0'dan itibaren kullanılabilir.
useTablePartitionManagement yanlış olarak trueayarlandığında, Azure Depolama V2 hesaplarının maliyetlerini azaltmak için tasarlanmış bir bölüm yönetimi algoritması kullanır. v2.10.0'dan itibaren kullanılabilir. Bu özellik şu anda önizleme aşamasındadır ve tüketim planıyla henüz uyumlu değildir.
useGracefulShutdown yanlış (Önizleme) Konak kapatma işlemlerinin işlem içi işlev yürütmelerinde başarısız olma olasılığını azaltmak için düzgün bir şekilde kapatmayı etkinleştirin.
maxEntityOperationBatchSize(2.6.1) Tüketim planı: 50
Ayrılmış/Premium plan: 5000
Toplu iş olarak işlenen varlık işlemlerinin en fazla sayısı. 1 olarak ayarlanırsa, toplu işlem devre dışı bırakılır ve her işlem iletisi ayrı bir işlev çağrısıyla işlenir.
storeInputsInOrchestrationHistory yanlış olarak trueayarlandığında Dayanıklı Görev Çerçevesi'ne geçmiş tablosundaki etkinlik girişlerini kaydetmesini söyler. Bu, düzenleme geçmişini sorgularken etkinlik işlevi girişlerinin görüntülenmesini sağlar.

Bu ayarların çoğu performansı iyileştirmeye yöneliktir. Daha fazla bilgi için bkz . Performans ve ölçeklendirme.

Sonraki adımlar