نظرة عامة على Durable Functions في عامل .NET المعزول
هذه المقالة هي نظرة عامة على Durable Functions في العامل المعزول .NET. يسمح العامل المعزول لتطبيق Durable Functions الخاص بك بالتشغيل على إصدار .NET مختلف عن إصدار مضيف Azure Functions.
لماذا تستخدم Durable Functions في العامل المعزول .NET؟
يتيح لك استخدام هذا النموذج الحصول على جميع الفوائد العظيمة التي تأتي مع عملية العامل المعزولة ل Azure Functions .NET. لمزيد من المعلومات، راجع فوائد نموذج العامل المعزول. بالإضافة إلى ذلك، تتضمن SDK الجديدة هذه بعض الميزات الجديدة.
تحسينات الميزات على Durable Functions قيد المعالجة
- يمكن إدخال التنسيق مباشرة:
MyOrchestration([OrchestrationTrigger] TaskOrchestrationContext context, T input)
- دعم المكالمات ذات الكتابة القوية والأنشطة والتزامنات المستندة إلى الفئة (ملاحظة: في المعاينة. لمزيد من المعلومات، راجع هنا.)
- بالإضافة إلى جميع فوائد عامل Azure Functions .NET المعزول.
منشئ المصدر والأنشطة والتزامنات المستندة إلى الفئة
المتطلبات: أضف <PackageReference Include="Microsoft.DurableTask.Generators" Version="1.0.0-preview.1" />
إلى مشروعك.
بإضافة حزمة منشئ المصدر، يمكنك الوصول إلى ميزتين جديدتين:
- الأنشطة المستندة إلى الفئة والتزامنات، وهي طريقة بديلة لكتابة Durable Functions. بدلا من "المستندة إلى الدالة"، يمكنك كتابة فئات مكتوبة بقوة، والتي ترث الأنواع من Durable SDK.
- أساليب ملحق مكتوبة بقوة لاستدعاء التنسيقات والأنشطة الفرعية. يمكن أيضا استخدام أساليب الامتداد هذه من الأنشطة والتزامنات "المستندة إلى الدالة".
مثال يستند إلى الدالة
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);
}
}
مثال يستند إلى الفئة
[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);
}
}
الكيانات الدائمة
يتم دعم الكيانات الدائمة في العامل المعزول .NET. راجع دليل المطور.
دليل الترحيل
يفترض هذا الدليل أنك تبدأ بمشروع .NET Durable Functions 2.x.
تحديث مشروعك
الخطوة الأولى هي تحديث مشروعك إلى Azure Functions .NET معزول. ثم قم بتحديث مراجع حزمة Durable Functions NuGet.
القديمه:
<ItemGroup>
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.DurableTask" Version="2.9.0" />
</ItemGroup>
الجديد:
<ItemGroup>
<PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.DurableTask" Version="1.1.0" />
</ItemGroup>
تحديث التعليمات البرمجية
Durable Functions لعامل .NET المعزول هو حزمة جديدة تماما مع أنواع ومساحات أسماء مختلفة. نتيجة لذلك، هناك تغييرات مطلوبة على التعليمات البرمجية الخاصة بك، ولكن العديد من واجهات برمجة التطبيقات تصطف دون الحاجة إلى تغييرات.
مخطط Host.json
ظل مخطط العامل المعزول ل Durable Functions .NET و Durable Functions 2.x كما هو، ولا يجب إجراء أي تغييرات.
تغييرات واجهة برمجة التطبيقات العامة
هذا الجدول ليس قائمة شاملة بالتغييرات.
2.x | Isolated |
---|---|
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>() أو إدخال كمعلمة: MyOrchestration([OrchestrationTrigger] TaskOrchestrationContext context, T input) |
DurableActivityContext |
لا يوجد ما يعادل |
DurableActivityContext.GetInput<T>() |
إدخال الإدخال كمعلمة MyActivity([ActivityTrigger] T input) |
IDurableOrchestrationContext.CallActivityWithRetryAsync |
TaskOrchestrationContext.CallActivityAsync ، قم بتضمين TaskOptions المعلمة مع تفاصيل إعادة المحاولة. |
IDurableOrchestrationContext.CallSubOrchestratorWithRetryAsync |
TaskOrchestrationContext.CallSubOrchestratorAsync ، قم بتضمين TaskOptions المعلمة مع تفاصيل إعادة المحاولة. |
IDurableOrchestrationContext.CallHttpAsync |
TaskOrchestrationContext.CallHttpAsync |
IDurableOrchestrationContext.CreateReplaySafeLogger(ILogger) |
TaskOrchestrationContext.CreateReplaySafeLogger<T>() أو 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 |
تمت إزالتها، وإضافتها FunctionContext كمعلمة إدخال |
IDurableEntityContext.HasState |
TaskEntityOperation.State.HasState |
IDurableEntityContext.BatchSize |
تم الإزالة |
IDurableEntityContext.BatchPosition |
تم الإزالة |
IDurableEntityContext.GetState |
TaskEntityOperation.State.GetState |
IDurableEntityContext.SetState |
TaskEntityOperation.State.SetState |
IDurableEntityContext.DeleteState |
TaskEntityOperation.State.SetState(null) |
IDurableEntityContext.GetInput |
TaskEntityOperation.GetInput |
IDurableEntityContext.Return |
إزالة. قيمة إرجاع الأسلوب المستخدمة بدلا من ذلك. |
IDurableEntityContext.SignalEntity |
TaskEntityContext.SignalEntity |
IDurableEntityContext.StartNewOrchestration |
TaskEntityContext.ScheduleNewOrchestration |
IDurableEntityContext.DispatchAsync |
TaskEntityDispatcher.DispatchAsync . تمت إزالة المعلمات الإنشائية. |
IDurableOrchestrationClient.GetStatusAsync |
DurableTaskClient.GetInstanceAsync |
التغيرات السلوكية
- تم تغيير السلوك الافتراضي للتسلسل من
Newtonsoft.Json
إلىSystem.Text.Json
. لمزيد من المعلومات، راجع هنا .
الملاحظات
https://aka.ms/ContentUserFeedback.
قريبًا: خلال عام 2024، سنتخلص تدريجيًا من GitHub Issues بوصفها آلية إرسال ملاحظات للمحتوى ونستبدلها بنظام ملاحظات جديد. لمزيد من المعلومات، راجعإرسال الملاحظات وعرضها المتعلقة بـ