Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Dayanıklı İşlevler uzantısı, kodunuzu iş akışı düzenlemesi için Dayanıklı İşlevler çalışma zamanına bağlayan tetikleyici ve çıkış bağlamaları sağlar. Dayanıklı iş akışlarını başlatan ve yöneten düzenleyici işlevlerini, etkinlik işlevlerini, varlık işlevlerini ve istemci işlevlerini tanımlamak için bu bağlamaları kullanın.
Bu makalede, desteklenen her dil için kod örnekleriyle her bağlamanın (düzenleme tetikleyicisi, etkinlik tetikleyicisi, varlık tetikleyicisi ve düzenleme istemcisi) nasıl yapılandırılıp kullanılacağı açıklanmaktadır.
Makalenin üst kısmında Durable Functions geliştirme dilinizi seçtiğinizden emin olun.
Dayanıklı İşlevler , Azure İşlevleri için Python programlama modelinin her iki sürümünü de destekler. Python v2 önerilen sürüm olduğundan, bu makaledeki örnekler yalnızca bu sürümü içerir.
Önkoşullar
- Durable Functions SDK, Python Paket Dizini (PyPI) paketi
azure-functions-durable, sürüm1.2.2veya daha yeni bir sürüm - host.json proje dosyasında ayarlanan uzantı paketi sürümü 4.x (veya sonraki bir sürüm)
Python için Dayanıklı İşlevler SDK'sı deposunda geri bildirim ve öneriler sağlayabilirsiniz.
Düzenleme tetikleyicisi
Dayanıklı düzenleyici işlevleri geliştirmek için düzenleme tetikleyicisini kullanabilirsiniz. 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 işlevleri geliştirirken, düzenleme tetikleyicisini yapılandırmak için OrchestrationTriggerAttribute .NET özniteliğini kullanırsınız.
Java için düzenleme tetikleyicisini yapılandırmak için @DurableOrchestrationTrigger ek açıklamasını kullanırsınız.
İşlevleri geliştirmek için Node.js programlama modelinin 4. sürümünü kullandığınızda, app nesnesini @azure/functions npm modülünden içeri aktarırsınız. Ardından Durable Functions API'sinin app.orchestration yöntemini doğrudan işlev kodunuzda çağırırsınız. Bu yöntem orchestrator işlevinizi Durable Functions çerçevesine kaydeder.
Orchestrator işlevleri yazarken, bindings dosyasının dizisinde aşağıdaki JSON nesnesini kullanarak düzenleme tetikleyicisini tanımlarsınız:
{
"name": "<name-of-input-parameter-in-function-signature>",
"orchestration": "<optional-name-of-orchestration>",
"type": "orchestrationTrigger",
"direction": "in"
}
orchestration değeri, istemcilerin orchestrator işlevinin yeni örneklerini başlatmak istediklerinde kullanması gereken düzenlemenin adıdır. Bu özellik isteğe bağlıdır. Belirtmezseniz işlevin adı kullanılır.
Python v2 programlama modelini kullandığınızda, Python işlev kodunuzda orchestration_trigger dekoratör kullanarak doğrudan bir orkestrasyon tetikleyicisi tanımlayabilirsiniz.
v2 modelinde, DFApp örneğinden Durable Functions tetikleyicilerine ve bağlamalarına erişebilirsiniz. Durable Functions özgü dekoratörleri dışarı aktarmak için bu FunctionApp alt sınıfını kullanabilirsiniz.
Dahili olarak, bu tetikleyici bağlaması yeni orkestrasyon olayları için yapılandırılan dayanıklı depoyu araştırır. Olaylara örnek olarak şunlar verilebilir:
- Orkestrasyon başlatma olayları
- Dayanıklı süreölçer süre sonu olayları
- Etkinlik işlevi yanıt olayları
- Diğer işlevler tarafından tetiklenen dış olaylar
Orkestrasyon tetikleyici davranışı
Orkestrasyon tetikleyicisi hakkında bazı notlar:
- Tek iş parçacığı: Tek bir konak örneğinde tüm orkestratör işlevlerinin yürütülmesi 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/Ç işlemi gerçekleştirmediğinden emin olmak önemlidir. Bu iş parçacığının ancak Dayanıklı İşlevler'e özgü görev türlerini beklerken asenkron iş yapmadığından emin olmak da önemlidir.
- Zehirli ileti işleme: Orkestrasyon tetikleyicilerinde zehirli iletiler desteklenmez.
- İ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'daki düzenleme geçmişi tablosunda kalıcı hale getirilir. Bu dönüş değerlerini daha sonra açıklanan orchestration istemci bağlaması ile sorgulayabilirsiniz.
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ğlamlamalar tek iş parçacığı ve Girdi/Çıktı kurallarına uymayabileceği için diğer bağlamların kullanılması Dayanıklı Görev uzantısıyla ilgili sorunlara neden olabilir. Diğer bağlamaları kullanmak istiyorsanız, bunları yönlendirici 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 bkz . Orchestrator işlev kodu kısıtlamaları.
Uyarı
Orchestrator işlevleri hiçbir zaman bildirilmemelidir async.
Orkestrasyon tetikleyicisi kullanımı
Orkestrasyon tetikleyici bağlaması hem girişleri hem de çıkışları destekler. Giriş ve çıkış işleme hakkında bazı notlar şunlardır:
- Girişler: Girişleri olan düzenleme tetikleyicilerini çağırabilirsiniz. Girişlere bağlam giriş nesnesi aracılığıyla erişilir. Tüm girişler JSON serileştirilebilir olmalıdır.
- Çıkışlar: Düzenleme tetikleyicileri hem çıkış hem de giriş değerlerini destekler. İşlevin dönüş değeri, çıkış değerini atamak için kullanılır. Dönüş değeri JSON serileştirilebilir olmalıdır.
Orkestrasyon tetikleyici örneği
Aşağıdaki kod, temel bir Hello World orchestrator işlevi örneği sağlar. Bu örnek düzenleyici herhangi bir görev zamanlamaz.
Tetikleyiciyi tanımlamak için kullandığınız öznitelik, C# işlevlerinizi çalıştırıp çalıştırmadığınıza bağlıdır:
[FunctionName("HelloWorld")]
public static string RunOrchestrator([OrchestrationTrigger] IDurableOrchestrationContext context)
{
string name = context.GetInput<string>();
return $"Hello {name}!";
}
Uyarı
Yukarıdaki kod Durable Functions 2.x içindir. Durable Functions 1.x için DurableOrchestrationContext yerine IDurableOrchestrationContext kullanmanız gerekir. Sürümler arasındaki farklar hakkında daha fazla bilgi için bkz. Durable Functions sürümlerine genel bakış.
const { app } = require('@azure/functions');
const df = require('durable-functions');
df.app.orchestration('helloOrchestrator', function* (context) {
const name = context.df.getInput();
return `Hello ${name}`;
});
Uyarı
Oluşturucu durable-functions işlevi çıktığında kitaplık zaman uyumlu context.done yöntemini çağırır.
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ğırır. Aşağıdaki kod, bir etkinlik işlevinin nasıl çağrıldığını gösteren bir Merhaba Dünya örneği sağlar:
[FunctionName("HelloWorld")]
public static async Task<string> RunOrchestrator(
[OrchestrationTrigger] IDurableOrchestrationContext context)
{
string name = context.GetInput<string>();
string result = await context.CallActivityAsync<string>("SayHello", name);
return result;
}
Uyarı
Yukarıdaki kod Durable Functions 2.x içindir. Durable Functions 1.x için DurableOrchestrationContext yerine IDurableOrchestrationContext kullanmanız gerekir. Sürümler arasındaki farklar hakkında daha fazla bilgi için bkz. Durable Functions sürümlerine genel bakış.
const { app } = require('@azure/functions');
const df = require('durable-functions');
const activityName = 'hello';
df.app.orchestration('helloOrchestrator', function* (context) {
const name = context.df.getInput();
const result = yield context.df.callActivity(activityName, 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
Orchestrator işlevleri tarafından çağrılan etkinlik işlevleri olarak bilinen işlevleri geliştirmek için etkinlik tetikleyicisini kullanabilirsiniz.
Etkinlik tetikleyicisini yapılandırmak için ActivityTriggerAttribute .NET özniteliğini kullanırsınız.
Etkinlik tetikleyicisini @DurableActivityTrigger yapılandırmak için ek açıklamayı kullanırsınız.
Etkinlik işlevinizi kaydetmek için app modülünden @azure/functions npm nesnesini içeri aktarın. Ardından Durable Functions API'sinin app.activity yöntemini doğrudan işlev kodunuzda çağırırsınız.
Etkinlik tetikleyicisini tanımlamak için bindingsdizisinde aşağıdaki JSON nesnesini kullanırsınız:
{
"name": "<name-of-input-parameter-in-function-signature>",
"activity": "<optional-name-of-activity>",
"type": "activityTrigger",
"direction": "in"
}
activity Değer, 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. Belirtmezseniz işlevin adı kullanılır.
activity_trigger dekoratörünüzü doğrudan Python işlev kodunuzda kullanarak etkinlik tetikleyicisi tanımlayabilirsiniz.
Dahili olarak, bu tetikleyici bağlama, yeni etkinlik yürütme olaylarını algılamak için yapılandırılmış dayanıklı depoda yoklama yapar.
Tetikleyici davranışı
Etkinlik tetikleyicisi hakkında bazı notlar şunlardır:
- İş parçacığı oluşturma: Düzenleme tetikleyicisinin aksine, etkinlik tetikleyicilerinin iş parçacığı oluşturma veya G/Ç işlemleri üzerinde herhangi bir kısıtlaması yoktur. Bunlar normal işlevler gibi ele alınabilir.
- Zehirli ileti işleme: Etkinlik tetikleyicilerinde zehirli iletiler desteklenmemektedir.
- İ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.
Tetikleyici kullanımı
Etkinlik tetikleyicisi bağlaması, düzenleme tetikleyicisi gibi hem girişleri hem de çıkışları destekler. Giriş ve çıkış işleme hakkında bazı notlar şunlardır:
- Girişler: Etkinlik tetikleyicileri bir orchestrator işlevindeki girişlerle çağrılabilir. Tüm girişler JSON serileştirilebilir olmalıdır.
- Çıkışlar: Etkinlik işlevleri hem çıkış hem de giriş değerlerini 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 instanceIdparametresine bağlanabilir.
Tetikleyici örneği
Aşağıdaki kod, temel bir Hello World etkinlik işlevi örneği sağlar.
[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 'tir (veya Dayanıklı İşlevler 1.x için DurableActivityContext ). Bununla birlikte, .NET etkinlik tetikleyicileri doğrudan JSON serileştirilebilir türlerine (ilkel türler dahil) bağlamayı da destekler, bu nedenle işlevin aşağıdaki basitleştirilmiş sürümünü de kullanabilirsiniz:
[FunctionName("SayHello")]
public static string SayHello([ActivityTrigger] string name)
{
return $"Hello {name}!";
}
const { app } = require('@azure/functions');
const df = require('durable-functions');
const activityName = 'hello';
df.app.activity(activityName, {
handler: (input) => {
return `Hello, ${input}`;
},
});
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);
}
Etkinlik giriş ve çıkış bağlamalarını kullanma
Etkinlik tetikleyicisi bağlamasının yanı sıra normal giriş ve çıkış bağlamalarını da kullanabilirsiniz.
Örneğin, bir etkinlik işlevi bir düzenleyici işlevinden giriş alabilir. Etkinlik işlevi daha sonra bu girişi Azure Event Hubs'a ileti olarak gönderebilir.
const { app } = require('@azure/functions');
const df = require('durable-functions');
df.app.orchestration('helloOrchestrator', function* (context) {
const input = context.df.getInput();
yield context.df.callActivity('sendToEventHub', input);
return `Message sent: ${input}`;
});
const { EventHubProducerClient } = require("@azure/event-hubs");
const connectionString = process.env.EVENT_HUB_CONNECTION_STRING;
const eventHubName = process.env.EVENT_HUB_NAME;
df.app.activity("sendToEventHub", {
handler: async (message, context) => {
const producer = new EventHubProducerClient(connectionString, eventHubName);
try {
const batch = await producer.createBatch();
batch.tryAdd({ body: message });
await producer.sendBatch(batch);
context.log(`Message sent to Event Hubs: ${message}`);
} catch (err) {
context.log.error("Failed to send message to Event Hubs:", err);
throw err;
} finally {
await producer.close();
}
},
});
app.storageQueue('helloQueueStart', {
queueName: 'start-orchestration',
extraInputs: [df.input.durableClient()],
handler: async (message, context) => {
const client = df.getClient(context);
const orchestratorName = message.orchestratorName || 'helloOrchestrator';
const input = message.input || null;
const instanceId = await client.startNew(orchestratorName, { input });
context.log(`Started orchestration with ID = '${instanceId}'`);
},
});
Orchestration istemcisi
Orchestrator işlevleriyle etkileşim kuran işlevler yazmak için düzenleme istemci bağlamasını kullanabilirsiniz. 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.
- Olayları çalışma esnasında onlara gönderin.
- Örnek geçmişini temizle.
Durable Functions 1.x) içinde DurableClientAttribute özniteliğini (OrchestrationClientAttribute) kullanarak bir düzenleme istemcisine bağlanabilirsiniz.
Anotasyonu kullanarak bir orkestrasyon istemcisine @DurableClientInput bağlanabilirsiniz.
İstemci işlevinizi kaydetmek için app modülünden @azure/functions npm nesnesini içeri aktarırsınız. Ardından tetikleyici türünüzle ilgili bir Durable Functions API yöntemi çağırırsınız. Örneğin, bir HTTP tetikleyicisi için app.http yöntemini çağırırsınız. Kuyruk tetikleyicisi için app.storageQueue yöntemini çağırırsınız.
Dayanıklı istemci tetikleyicisini tanımlamak için bindingsdizisinde aşağıdaki JSON nesnesini kullanırsınız:
{
"name": "<name-of-input-parameter-in-function-signature>",
"taskHub": "<optional-name-of-task-hub>",
"connectionName": "<optional-name-of-connection-string-app-setting>",
"type": "orchestrationClient",
"direction": "in"
}
- özelliği
taskHub, birden çok işlev uygulaması aynı depolama hesabını paylaştığında ancak birbirinden yalıtılması gerektiğinde kullanılır. Bu özelliği belirtmezseniz, host.json varsayılan değeri kullanılır. Bu değer, hedef düzenleyici işlevlerinin kullandığı değerle eşleşmelidir. -
connectionNamedeğeri, bir depolama hesabı bağlantı dizesi içeren bir uygulama ayarının adıdır. Bu connection string tarafından temsil edilen depolama hesabı, hedef orkestratör işlevlerinin kullandığı hesapla aynı olmalıdır. Bu özelliği belirtmezseniz, işlev uygulaması için varsayılan depolama hesabı bağlantı dizesi kullanılır.
Uyarı
Çoğu durumda, bu özellikleri atlayıp varsayılan davranışa güvenmenizi öneririz.
durable_client_input dekoratörünüzü doğrudan Python işlev kodunuzda kullanarak dayanıklı bir istemci tetikleyicisi tanımlayabilirsiniz.
Müşteri kullanımı
Genellikle Durable Functions 1.x'te IDurableClient (DurableOrchestrationClient) uygulamasına bağlanırsınız ve bu da Durable Functions tarafından desteklenen tüm düzenleme istemci API'lerine tam erişim sağlar.
Genellikle DurableClientContext sınıfına bağlanırsınız.
İstemci nesnesine erişim elde etmek için dile özgü SDK'sını kullanmanız gerekir.
Aşağıdaki kod, Hello World orkestrasyonunu başlatan bir kuyruk tetiklemeli işlev örneği gösterir.
[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);
}
Uyarı
Yukarıdaki C# kodu Durable Functions 2.x içindir. Durable Functions 1.x için, OrchestrationClient özniteliği yerine DurableClient özniteliğini ve DurableOrchestrationClient yerine IDurableOrchestrationClient parametre türünü kullanmanız gerekir. Sürümler arasındaki farklar hakkında daha fazla bilgi için bkz. Durable Functions sürümlerine genel bakış.
const { app } = require('@azure/functions');
const df = require('durable-functions');
app.storageQueue('helloQueueStart', {
queueName: 'start-orchestration',
extraInputs: [df.input.durableClient()],
handler: async (message, context) => {
const client = df.getClient(context);
const orchestratorName = message.orchestratorName || 'helloOrchestrator';
const input = message.input || null;
const instanceId = await client.startNew(orchestratorName, { input });
context.log(`Started orchestration with ID = '${instanceId}' from queue message.`);
},
});
import azure.functions as func
import azure.durable_functions as df
myApp = df.DFApp(http_auth_level=func.AuthLevel.ANONYMOUS)
@myApp.queue_trigger(
arg_name="msg",
queue_name="start-orchestration",
connection="AzureWebJobsStorage"
)
@myApp.durable_client_input(client_name="client")
async def client_function(msg: func.QueueMessage, client: df.DurableOrchestrationClient):
input_data = msg.get_body().decode("utf-8")
await client.start_new("my_orchestrator", None, input_data)
return None
function.json
{
"bindings": [
{
"name": "InputData",
"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 ayrıntılı bilgi için bkz. Azure'da Dayanıklı İşlevler'de örnekleri yönetme.
Varlık tetikleyicisi
Varlık tetikleyicisini kullanarak bir varlık işlevi geliştirebilirsiniz. Bu tetikleyici, belirli bir varlık örneği için olayları işlemeyi destekler.
Uyarı
Varlık tetikleyicileri Dayanıklı İşlevler 2.x'den başlayarak kullanılabilir.
Dahili olarak, bu tetikleyici, yeni yürütülmesi gereken varlık işlemleri için yapılandırılmış dayanıklı depoyu yoklar.
Varlık tetikleyicisini yapılandırmak için EntityTriggerAttribute .NET özniteliğini kullanırsınız.
Varlık tetikleyicisini kaydetmek için app modülünden @azure/functions npm nesnesini içeri aktarırsınız. Ardından Durable Functions API'sinin app.entity yöntemini doğrudan işlev kodunuzda çağırırsınız.
const df = require('durable-functions');
df.app.entity('counter', (context) => {
const currentValue = context.df.getState(() => 0);
switch (context.df.operationName) {
case 'add':
context.df.setState(currentValue + context.df.getInput());
break;
case 'reset':
context.df.setState(0);
break;
case 'get':
context.df.return(currentValue);
break;
}
});
Uyarı
Varlık tetikleyicileri henüz Java için desteklenmemektedir.
Uyarı
Varlık tetikleyicileri henüz PowerShell için desteklenmemektedir.
entity_trigger dekoratörünüzü doğrudan Python işlev kodunuzda kullanarak bir varlık tetikleyicisi tanımlayabilirsiniz.
Tetikleyici davranışı
Varlık tetikleyicisi hakkında bazı notlar şunlardır:
- Tek iş parçacığı oluşturma: 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 iletiler desteklenmemektedir.
- İ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 kullanabileceğiniz 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 getirilir.
Varlık tetikleyicilerini tanımlama ve bunlarla etkileşim kurma hakkında daha fazla bilgi ve örnek için bkz. Varlık işlevleri.
Varlık istemcisi
Varlık işlevlerini zaman uyumsuz olarak tetikleme için varlık istemci bağlamasını kullanabilirsiniz. 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.
Varlık istemcisini kaydetmek yerine, herhangi bir kayıtlı işlevden varlık tetikleyici yöntemini çağırmak için signalEntity veya callEntity kullanırsınız.
Kuyrukla tetiklenen bir işlevden kullanabilirsiniz
client.signalEntity:const { app } = require('@azure/functions'); const df = require('durable-functions'); app.storageQueue('helloQueueStart', { queueName: 'start-orchestration', extraInputs: [df.input.durableClient()], handler: async (message, context) => { const client = df.getClient(context); const entityId = new df.EntityId('counter', 'myCounter'); await client.signalEntity(entityId, 'add', 5); }, });Orchestrator işlevinden kullanabilirsiniz
context.df.callEntity:const { app } = require('@azure/functions'); const df = require('durable-functions'); df.app.orchestration('entityCaller', function* (context) { const entityId = new df.EntityId('counter', 'myCounter'); yield context.df.callEntity(entityId, 'add', 5); yield context.df.callEntity(entityId, 'add', 5); const result = yield context.df.callEntity(entityId, 'get'); return result; });
durable_client_input dekoratörünüzü doğrudan Python işlev kodunuzda kullanarak bir varlık istemcisi tanımlayabilirsiniz.
Uyarı
Varlık istemcileri henüz Java için desteklenmiyor.
Uyarı
Varlık istemcileri henüz PowerShell için desteklenmiyor.
İstemci olarak varlıklara erişim ve etkileşim kurma hakkında daha fazla bilgi ve örnek için bkz. Varlıklara Erişim.