نظرة عامة على 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. لمزيد من المعلومات، راجع هنا .