Aracılığıyla paylaş


.NET yalıtılmış çalışanındaki Dayanıklı İşlevler genel bakış

Bu makale, .NET yalıtılmış çalışanındaki Dayanıklı İşlevler genel bir bakıştır. Yalıtılmış çalışan, Dayanıklı İşlevler uygulamanızın Azure İşlevleri ana bilgisayarından farklı bir .NET sürümünde çalışmasına olanak tanır.

.NET yalıtılmış çalışanda neden Dayanıklı İşlevler kullanmalısınız?

Bu modelin kullanılması, Azure İşlevleri .NET yalıtılmış çalışan işlemiyle birlikte gelen tüm harika avantajları elde etmenizi sağlar. Daha fazla bilgi için bkz . Yalıtılmış çalışan modelinin avantajları. Ayrıca, bu yeni SDK bazı yeni özellikler içerir.

İşlem içi Dayanıklı İşlevler üzerinde özellik geliştirmeleri

  • Düzenleme girişi doğrudan eklenebilir: MyOrchestration([OrchestrationTrigger] TaskOrchestrationContext context, T input)
  • Kesin olarak yazılan çağrılar ve sınıf tabanlı etkinlikler ve düzenleme desteği (NOT: önizlemede). Daha fazla bilgi için buraya bakın.)
  • Ayrıca Azure İşlevleri .NET yalıtılmış çalışanının tüm avantajları.

Kaynak oluşturucu ve sınıf tabanlı etkinlikler ve düzenlemeler

Gereksinim: projenize ekleyin <PackageReference Include="Microsoft.DurableTask.Generators" Version="1.0.0-preview.1" /> .

Kaynak oluşturucu paketini ekleyerek iki yeni özelliğe erişebilirsiniz:

  • Sınıf tabanlı etkinlikler ve düzenleme, Dayanıklı İşlevler yazmanın alternatif bir yoludur. "İşlev tabanlı" yerine, türleri Dayanıklı SDK'dan devralan kesin olarak belirlenmiş sınıflar yazarsınız.
  • Alt düzenleme ve etkinlikleri çağırmak için kesin olarak yazılan uzantı yöntemleri. Bu uzantı yöntemleri "işlev tabanlı" etkinliklerden ve düzenlemelerden de kullanılabilir.

İşlev tabanlı örnek

public static class MyFunctions
{
    [Function(nameof(MyActivity))] 
    public static async Task<string> MyActivity([ActivityTrigger] string input)
    {
        // implementation
    }

    [Function(nameof(MyOrchestration))] 
    public static async Task<string> MyOrchestration([OrchestrationTrigger] TaskOrchestrationContext context, string input)
    {
        // implementation
        return await context.CallActivityAsync(nameof(MyActivity), input);
    }
}

Sınıf tabanlı örnek

[DurableTask(nameof(MyActivity))]
public class MyActivity : TaskActivity<string, string>
{
    private readonly ILogger logger;

    public MyActivity(ILogger<MyActivity> logger) // activites have access to DI.
    {
        this.logger = logger;
    }

    public async override Task<string> RunAsync(TaskActivityContext context, string input)
    {
        // implementation
    }
}

[DurableTask(nameof(MyOrchestration))]
public class MyOrchestration : TaskOrchestrator<string, string>
{
    public async override Task<string> RunAsync(TaskOrchestrationContext context, string input)
    {
        ILogger logger = context.CreateReplaySafeLogger<MyOrchestration>(); // orchestrations do NOT have access to DI.

        // An extension method was generated for directly invoking "MyActivity".
        return await context.CallMyActivityAsync(input);
    }
}

Dayanıklı varlıklar

Dayanıklı varlıklar .NET yalıtılmış çalışanda desteklenir. Geliştirici kılavuzuna bakın.

Geçiş kılavuzu

Bu kılavuzda bir .NET Dayanıklı İşlevler 2.x projesiyle başladığınız varsayılır.

Projenizi güncelleştirme

İlk adım, projenizi yalıtılmış .NET Azure İşlevleri güncelleştirmektir. Ardından Dayanıklı İşlevler NuGet paket başvurularınızı güncelleştirin.

Eski:

<ItemGroup>
  <PackageReference Include="Microsoft.Azure.WebJobs.Extensions.DurableTask" Version="2.9.0" />
</ItemGroup>

Yeni:

<ItemGroup>
  <PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.DurableTask" Version="1.1.0" />
</ItemGroup>

Kodunuzu güncelleştirme

.NET yalıtılmış çalışanı için Dayanıklı İşlevler, farklı türlere ve ad alanlarına sahip tamamen yeni bir pakettir. Sonuç olarak kodunuzda gerekli değişiklikler vardır, ancak API'lerin çoğu hiçbir değişiklik gerekmeyen bir şekilde sıralanır.

Host.json şeması

.NET yalıtılmış çalışanı ve Dayanıklı İşlevler 2.x Dayanıklı İşlevler şeması aynı kaldı, hiçbir değişiklik yapılmasına gerek yok.

Genel API değişiklikleri

Bu tablo, kapsamlı bir değişiklik listesi değildir.

2.x Yalıtılmış
IDurableOrchestrationClient DurableTaskClient
IDurableOrchestrationClient.StartNewAsync DurableTaskClient.ScheduleNewOrchestrationInstanceAsync
IDurableEntityClient.SignalEntityAsync DurableTaskClient.Entities.SignalEntityAsync
IDurableEntityClient.ReadEntityStateAsync DurableTaskClient.Entities.GetEntityAsync
IDurableEntityClient.ListEntitiesAsync DurableTaskClient.Entities.GetAllEntitiesAsync
IDurableEntityClient.CleanEntityStorageAsync DurableTaskClient.Entities.CleanEntityStorageAsync
IDurableOrchestrationContext TaskOrchestrationContext
IDurableOrchestrationContext.GetInput<T>() TaskOrchestrationContext.GetInput<T>() veya girişi parametre olarak ekleme: MyOrchestration([OrchestrationTrigger] TaskOrchestrationContext context, T input)
DurableActivityContext Eşdeğeri yok
DurableActivityContext.GetInput<T>() Girdiyi parametre olarak ekleme MyActivity([ActivityTrigger] T input)
IDurableOrchestrationContext.CallActivityWithRetryAsync TaskOrchestrationContext.CallActivityAsync, yeniden deneme ayrıntılarıyla birlikte parametresini ekleyin TaskOptions .
IDurableOrchestrationContext.CallSubOrchestratorWithRetryAsync TaskOrchestrationContext.CallSubOrchestratorAsync, yeniden deneme ayrıntılarıyla birlikte parametresini ekleyin TaskOptions .
IDurableOrchestrationContext.CallHttpAsync TaskOrchestrationContext.CallHttpAsync
IDurableOrchestrationContext.CreateReplaySafeLogger(ILogger) TaskOrchestrationContext.CreateReplaySafeLogger<T>() veya TaskOrchestrationContext.CreateReplaySafeLogger(string)
IDurableOrchestrationContext.CallEntityAsync TaskOrchestrationContext.Entities.CallEntityAsync
IDurableOrchestrationContext.SignalEntity TaskOrchestrationContext.Entities.SignalEntityAsync
IDurableOrchestrationContext.LockAsync TaskOrchestrationContext.Entities.LockEntitiesAsync
IDurableOrchestrationContext.IsLocked TaskOrchestrationContext.Entities.InCriticalSection
IDurableEntityContext TaskEntityContext.
IDurableEntityContext.EntityName TaskEntityContext.Id.Name
IDurableEntityContext.EntityKey TaskEntityContext.Id.Key
IDurableEntityContext.OperationName TaskEntityOperation.Name
IDurableEntityContext.FunctionBindingContext Kaldırıldı, giriş parametresi olarak ekle FunctionContext
IDurableEntityContext.HasState TaskEntityOperation.State.HasState
IDurableEntityContext.BatchSize Kaldırıldı
IDurableEntityContext.BatchPosition Kaldırıldı
IDurableEntityContext.GetState TaskEntityOperation.State.GetState
IDurableEntityContext.SetState TaskEntityOperation.State.SetState
IDurableEntityContext.DeleteState TaskEntityOperation.State.SetState(null)
IDurableEntityContext.GetInput TaskEntityOperation.GetInput
IDurableEntityContext.Return Kaldırıldı. Bunun yerine kullanılan yöntem dönüş değeri.
IDurableEntityContext.SignalEntity TaskEntityContext.SignalEntity
IDurableEntityContext.StartNewOrchestration TaskEntityContext.ScheduleNewOrchestration
IDurableEntityContext.DispatchAsync TaskEntityDispatcher.DispatchAsync. Oluşturucu parametreleri kaldırıldı.
IDurableOrchestrationClient.GetStatusAsync DurableTaskClient.GetInstanceAsync

Davranış değişiklikleri

  • Serileştirme varsayılan davranışı olarak Newtonsoft.Json System.Text.Jsondeğiştirildi. Daha fazla bilgi için buraya bakın.