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 bindings
dizisindeki 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 DFApp
eriş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 IDurableOrchestrationContext
kullanmanı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.
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 IDurableOrchestrationContext
kullanmanı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 bindings
aş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.
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}!`;
};
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 bindings
aş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ılanhost.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.
İ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 IDurableOrchestrationClient
parametre 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 bindings
aş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.
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 bindings
aş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ılanhost.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.
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 EventGridTopicEndpoint Azure 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 true ayarlandığı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 false ayarlandığı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 true ayarlandığı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 true ayarlandığı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.