.NET isolated 작업자에서의 Durable Functions 개요

.NET 격리 작업자를 사용하면 Azure Functions 호스트 프로세스와 독립적으로 지원되는 모든 .NET 버전에서 Durable Functions를 실행할 수 있습니다. 이 모델을 사용하면 종속성 주입, 미들웨어 및 .NET 버전 관리를 완전히 제어할 수 있습니다.

이 문서에서는 다음에 대해 알아봅니다.

Benefits

.NET 격리 작업자는 Durable Functions 앱에 다음과 같은 몇 가지 이점을 제공합니다.

  • 독립 .NET 버전 관리: Functions 호스트가 업데이트되는 것을 기다리지 않고 .NET 8, .NET 9 이상에서 앱을 실행합니다.
  • 전체 종속성 주입: 활동에서 표준 .NET IServiceCollection / IServiceProvider 패턴을 사용합니다.
  • 사용자 정의 미들웨어: Functions 워커 미들웨어 파이프라인을 통해 로깅, 인증, 오류 처리와 같은 횡단적 관심사를 추가할 수 있습니다.
  • 직접 입력 주입: 오케스트레이션 입력은 트리거 메서드 서명 MyOrchestration([OrchestrationTrigger] TaskOrchestrationContext context, T input)에 직접 삽입할 수 있습니다.
  • 강타입 호출 (미리 보기): 소스 생성기 패키지를 사용하면 액티비티와 하위 오케스트레이션에 대해 컴파일 시점에 안전한 호출을 수행할 수 있습니다. 자세한 내용은 원본 생성기 및 클래스 기반 구문(미리 보기)을 참조하세요.

격리된 작업자 혜택의 전체 목록은 격리된 작업자 모델의 혜택을 참조하세요.

Get started

.NET 격리 작업자를 사용하여 Durable Functions 앱을 만들려면 다음을 수행합니다.

  1. 필요한 NuGet 패키지를 설치합니다.

    <PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.DurableTask" Version="1.*" />
    
  2. TaskOrchestrationContext는 오케스트레이터에, DurableTaskClient는 클라이언트 작업에 사용합니다. 전체 연습은 빠른 시작 자습서 를 참조하세요.

In-Process의 주요 차이점

인프로세스 모델에서 마이그레이션하거나 이를 비교할 때 주요 차이점은 다음과 같습니다.

영역 진행 중 .NET 격리 작업자
NuGet 패키지 Microsoft.Azure.WebJobs.Extensions.DurableTask Microsoft.Azure.Functions.Worker.Extensions.DurableTask
오케스트레이터 컨텍스트 IDurableOrchestrationContext TaskOrchestrationContext
클라이언트 유형 IDurableOrchestrationClient DurableTaskClient
활동 컨텍스트 IDurableActivityContext TaskActivityContext
네임스페이스 Microsoft.Azure.WebJobs.Extensions.DurableTask Microsoft.DurableTask / Microsoft.Azure.Functions.Worker
재생 안전 로거 context.CreateReplaySafeLogger(log) context.CreateReplaySafeLogger("Name")

프로젝트 설정, 패키지 참조, API 매핑, 동작 차이 및 일반적인 문제를 다루는 포괄적인 마이그레이션 가이드는 In-Process에서 격리된 작업자 모델로 마이그레이션을 참조하세요.

원본 생성기 및 클래스 기반 구문(미리 보기)

원본 생성기 패키지는 함수 기반 지속성 함수에 대한 대안을 제공합니다. 특성이 있는 [Function] 정적 메서드 대신 Durable SDK에서 상속하는 강력한 형식의 클래스를 작성합니다.

사전 요구 사항

프로젝트에 원본 생성기 NuGet 패키지를 추가합니다.

<PackageReference Include="Microsoft.DurableTask.Generators" Version="1.0.0" />

패키지는 다음 두 가지 기능을 제공합니다.

  • 클래스 기반 활동 및 오케스트레이션TaskOrchestrator<TInput, TOutput>TaskActivity<TInput, TOutput>를 상속하는 강력한 형식의 클래스.
  • 강력한 형식의 확장 메서드 - 하위 오케스트레이션 및 활동을 호출하기 위한 컴파일 시간에 안전한 메서드입니다. 이러한 확장 메서드는 함수 기반 오케스트레이션에서도 작동합니다.

예시

다음 예제에서는 클래스 기반 작업을 호출하는 클래스 기반 오케스트레이션을 보여줍니다.

using Microsoft.DurableTask;

[DurableTask]
public class MyOrchestration : TaskOrchestrator<string, string>
{
    public override async Task<string> RunAsync(TaskOrchestrationContext context, string input)
    {
        return await context.CallActivityAsync<string>(nameof(MyActivity), input);
    }
}

[DurableTask]
public class MyActivity : TaskActivity<string, string>
{
    public override Task<string> RunAsync(TaskActivityContext context, string input)
    {
        return Task.FromResult($"Processed: {input}");
    }
}

Tip

기능적인 입력 또는 출력이 필요하지 않은 오케스트레이션이나 활동에는 일반 형식 인수로서 object? (예를 들어, TaskOrchestrator<object?, object?>)를 사용합니다. 이 패턴을 사용하면 클래스 기반 모델을 계속 사용하는 동안 활동에서 종속성 주입(예 ILogger<T>: )을 사용할 수 있습니다.

지속성 엔터티

지속성 엔터티는 .NET 격리된 작업자에서 지원됩니다. 자세한 내용은 개발자 가이드를 참조하세요.

다음 단계