Aracılığıyla paylaş


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

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

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.

Sonraki adımlar