.NET 격리 작업자를 사용하면 Azure Functions 호스트 프로세스와 독립적으로 지원되는 모든 .NET 버전에서 Durable Functions를 실행할 수 있습니다. 이 모델을 사용하면 종속성 주입, 미들웨어 및 .NET 버전 관리를 완전히 제어할 수 있습니다.
이 문서에서는 다음에 대해 알아봅니다.
- 지속적 기능에 있어 격리된 근로자의 이점
- 시작하기 필요한 패키지들
- In-Process의 주요 차이점 API 및 네임스페이스
- 소스 생성기 및 클래스 기반 구문 (미리 보기) (강력한 타입 지정 오케스트레이션용)
Benefits
.NET 격리 작업자는 Durable Functions 앱에 다음과 같은 몇 가지 이점을 제공합니다.
- 독립 .NET 버전 관리: Functions 호스트가 업데이트되는 것을 기다리지 않고 .NET 8, .NET 9 이상에서 앱을 실행합니다.
-
전체 종속성 주입: 활동에서 표준 .NET
IServiceCollection/IServiceProvider패턴을 사용합니다. - 사용자 정의 미들웨어: Functions 워커 미들웨어 파이프라인을 통해 로깅, 인증, 오류 처리와 같은 횡단적 관심사를 추가할 수 있습니다.
-
직접 입력 주입: 오케스트레이션 입력은 트리거 메서드 서명
MyOrchestration([OrchestrationTrigger] TaskOrchestrationContext context, T input)에 직접 삽입할 수 있습니다. - 강타입 호출 (미리 보기): 소스 생성기 패키지를 사용하면 액티비티와 하위 오케스트레이션에 대해 컴파일 시점에 안전한 호출을 수행할 수 있습니다. 자세한 내용은 원본 생성기 및 클래스 기반 구문(미리 보기)을 참조하세요.
격리된 작업자 혜택의 전체 목록은 격리된 작업자 모델의 혜택을 참조하세요.
시작하기
.NET 격리 작업자를 사용하여 Durable Functions 앱을 만들려면 다음을 수행합니다.
필요한 NuGet 패키지를 설치합니다.
<PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.DurableTask" Version="1.*" />TaskOrchestrationContext는 오케스트레이터에,DurableTaskClient는 클라이언트 작업에 사용합니다. 전체 연습은 빠른 시작 자습서 를 참조하세요.
In-Process의 주요 차이점
인프로세스 모델에서 마이그레이션하거나 이를 비교할 때 주요 차이점은 다음과 같습니다.
| Area | 진행 중 | .NET 격리 작업자 |
|---|---|---|
| NuGet 패키지 | Microsoft.Azure.WebJobs.Extensions.DurableTask |
Microsoft.Azure.Functions.Worker.Extensions.DurableTask |
| 오케스트레이터 컨텍스트 | IDurableOrchestrationContext |
TaskOrchestrationContext |
| 클라이언트 유형 | IDurableOrchestrationClient |
DurableTaskClient |
| 활동 컨텍스트 | IDurableActivityContext |
TaskActivityContext |
| Namespace | 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 격리된 작업자에서 지원됩니다. 자세한 내용은 개발자 가이드를 참조하세요.