Dayanıklı İşlevler'de sonsuz düzenleme (Azure İşlevleri)
Sonsuz düzenleme, hiç bitmeyecek düzenleyici işlevlerdir. Toplayıcılar ve sonsuz döngü gerektiren herhangi bir senaryo için Dayanıklı İşlevler kullanmak istediğinizde kullanışlıdır.
Düzenleme geçmişi
Düzenleme geçmişi konusunda açıklandığı gibi Dayanıklı Görev Çerçevesi, her işlev düzenlemesinin geçmişini izler. Düzenleyici işlevi yeni çalışma zamanlamaya devam ettikçe bu geçmiş sürekli olarak büyür. Düzenleyici işlevi sonsuz bir döngüye girer ve çalışmayı sürekli olarak zamanlarsa, bu geçmiş kritik ölçüde büyüyebilir ve önemli performans sorunlarına neden olabilir. Sonsuz düzenleme kavramı, sonsuz döngülere ihtiyaç duyan uygulamalar için bu tür sorunları azaltmak için tasarlanmıştır.
Sıfırlama ve yeniden başlatma
Orchestrator işlevleri sonsuz döngüler kullanmak yerine düzenleme tetikleyicisi bağlamasınınyeni olarak devam yöntemini çağırarak durumlarını sıfırlar. Bu yöntem, bir sonraki düzenleyici işlev oluşturma için yeni giriş haline gelen JSON-serializable parametresini alır.
Yeni olarak devam et çağrıldığında düzenleme örneği yeni giriş değeriyle kendini yeniden başlatır. Aynı örnek kimliği korunur, ancak düzenleyici işlevinin geçmişi sıfırlanır.
Not
Dayanıklı Görev Çerçevesi aynı örnek kimliğini korur, ancak orchestrator işlevi için yeni olarak devam ederek sıfırlayan yeni bir yürütme kimliği oluşturur. Bu yürütme kimliği dışarıdan kullanıma sunulmaz, ancak düzenleme yürütmesinde hata ayıklama sırasında bilgi edinmek yararlı olabilir.
Düzenli çalışma örneği
Sonsuz düzenlemelerde kullanım örneklerinden biri, periyodik çalışmaları süresiz olarak yapması gereken koddur.
[FunctionName("Periodic_Cleanup_Loop")]
public static async Task Run(
[OrchestrationTrigger] IDurableOrchestrationContext context)
{
await context.CallActivityAsync("DoCleanup", null);
// sleep for one hour between cleanups
DateTime nextCleanup = context.CurrentUtcDateTime.AddHours(1);
await context.CreateTimer(nextCleanup, CancellationToken.None);
context.ContinueAsNew(null);
}
Not
Önceki C# örneği 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.
Bu örnekle zamanlayıcı tarafından tetiklenen işlev arasındaki fark, buradaki temizleme tetikleyici sürelerinin bir zamanlamaya bağlı olmamasıdır. Örneğin, bir işlevi saatte bir yürüten bir CRON zamanlaması onu 1:00, 2:00, 3:00 vb. gibi bir saatte yürütür ve çakışma sorunlarıyla karşılaşabilir. Ancak bu örnekte temizleme işlemi 30 dakika sürerse 1:00, 2:30, 4:00 vb. olarak zamanlanır ve çakışma olasılığı yoktur.
Sonsuz düzenlemeye başlama
Diğer tüm düzenleme işlevlerinde olduğu gibi sonsuz bir düzenleme başlatmak için start-new veya schedule-new dayanıklı istemci yöntemini kullanın.
Not
Tek bir sonsuz düzenlemenin çalıştığından emin olmanız gerekiyorsa, düzenlemeye başlarken aynı örneği id
korumak önemlidir. Daha fazla bilgi için bkz . Örnek Yönetimi.
[FunctionName("Trigger_Eternal_Orchestration")]
public static async Task<HttpResponseMessage> OrchestrationTrigger(
[HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequestMessage request,
[DurableClient] IDurableOrchestrationClient client)
{
string instanceId = "StaticId";
await client.StartNewAsync("Periodic_Cleanup_Loop", instanceId);
return client.CreateCheckStatusResponse(request, instanceId);
}
Not
Önceki kod 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.
Sonsuz düzenlemeden çıkma
Bir düzenleyici işlevinin sonunda tamamlanması gerekiyorsa, tek yapmanız gereken çağırmamakContinueAsNew
ve işlevin çıkmasına izin vermektir.
Düzenleyici işlevi sonsuz bir döngüdeyse ve durdurulması gerekiyorsa, durdurmak için orchestration istemci bağlamasınınsonlandırma API'sini kullanın. Daha fazla bilgi için bkz . Örnek Yönetimi.