.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.Json
değiştirildi. Daha fazla bilgi için buraya bakın.