자습서: 최소 Orleans 애플리케이션 만들기
이 자습서에서는 단계별 지침에 따라 대부분의 Orleans 애플리케이션에 공통적인 기본 이동 부분을 만듭니다. 독립적이고 미니멀하게 설계되었습니다.
이 자습서는 프로덕션 환경에 유용한 적절한 오류 처리 및 기타 필수 코드가 부족합니다. 그러나 Orleans에 대한 일반적인 앱 구조를 실습하고 가장 관련성이 큰 부분에 대한 지속적인 학습에 집중할 수 있도록 도와줍니다.
필수 조건
프로젝트 설정
이 자습서에서는 동일한 솔루션의 일부로 4개의 프로젝트를 만듭니다.
- 조직 인터페이스를 포함하는 라이브러리
- 조직 클래스를 포함하는 라이브러리
- 사일로를 호스트하는 콘솔 앱
- 클라이언트를 호스트하는 콘솔 앱
Visual Studio에서 구조 만들기
기본 코드를 아래의 각 프로젝트에 지정된 코드로 바꿉니다.
- 먼저 새 솔루션에서 콘솔 앱 프로젝트를 만듭니다. 프로젝트 파트 사일로를 호출하고 솔루션의 이름을
OrleansHelloWorld
로 지정합니다. 콘솔 앱을 만드는 방법에 대한 자세한 내용은 자습서: Visual Studio를 사용하여 .NET 콘솔 애플리케이션 만들기를 참조하세요. - 다른 콘솔 앱 프로젝트를 추가하고 이름을
Client
로 지정합니다. - 클래스 라이브러리를 추가하고 이름을
GrainInterfaces
로 지정합니다. 클래스 라이브러리를 만드는 방법에 대한 자세한 내용은 자습서: Visual Studio를 사용하여 .NET 클래스 라이브러리 만들기를 참조하세요. - 다른 클래스 라이브러리를 추가하고 이름을
Grains
로 지정합니다.
기본 원본 파일 삭제
- Grains에서 Class1.cs를 삭제합니다.
- GrainInterfaces에서 Class1.cs를 삭제합니다.
참조 추가
- Grains는 GrainInterfaces를 참조합니다.
- Silo는 Grains를 참조합니다.
- Client는 GrainInterfaces를 참조합니다.
Orleans NuGet 패키지 추가
Project | NuGet 패키지 |
---|---|
사일로 | Microsoft.Orleans.Server Microsoft.Extensions.Logging.Console Microsoft.Extensions.Hosting |
클라이언트 | Microsoft.Orleans.Client Microsoft.Extensions.Logging.Console Microsoft.Extensions.Hosting |
조직 인터페이스 | Microsoft.Orleans.Sdk |
조직 | Microsoft.Orleans.Sdk Microsoft.Extensions.Logging.Abstractions |
Microsoft.Orleans.Server
, Microsoft.Orleans.Client
, Microsoft.Orleans.Sdk
은 사일로와 클라이언트에 가장 필요한 종속성을 가져오는 메타패키지입니다. 패키지 참조를 추가하는 방법에 대한 자세한 내용은 dotnet 패키지 추가 또는 NuGet 패키지 관리자를 사용하여 Visual Studio에서 패키지를 설치 및 관리를 참조하세요.
조직 인터페이스 정의
GrainInterfaces 프로젝트에서 IHello.cs 코드 파일을 추가하고 그 안에 다음 IHello
인터페이스를 정의합니다.
namespace GrainInterfaces;
public interface IHello : IGrainWithIntegerKey
{
ValueTask<string> SayHello(string greeting);
}
조직 클래스 정의
Grains 프로젝트에서 HelloGrain.cs 코드 파일을 추가하고 그 안에 다음 클래스를 정의합니다.
using GrainInterfaces;
using Microsoft.Extensions.Logging;
namespace Grains;
public class HelloGrain : Grain, IHello
{
private readonly ILogger _logger;
public HelloGrain(ILogger<HelloGrain> logger) => _logger = logger;
ValueTask<string> IHello.SayHello(string greeting)
{
_logger.LogInformation("""
SayHello message received: greeting = "{Greeting}"
""",
greeting);
return ValueTask.FromResult($"""
Client said: "{greeting}", so HelloGrain says: Hello!
""");
}
}
사일로 만들기
사일로 프로젝트를 만들려면 코드를 추가하여 조직을 호스트하고 실행하는 서버를 초기화합니다. localhost 클러스터링 공급자를 사용하면 외부 스토리지 시스템에 대한 종속되지 않고 모든 것을 로컬로 실행할 수 있습니다. 자세한 내용은 로컬 개발 구성을 참조하세요. 이 예제에서는 단일 사일로를 사용하여 클러스터를 실행합니다.
다음 코드를 Silo 프로젝트의 Program.cs에 추가합니다.
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
IHostBuilder builder = Host.CreateDefaultBuilder(args)
.UseOrleans(silo =>
{
silo.UseLocalhostClustering()
.ConfigureLogging(logging => logging.AddConsole());
})
.UseConsoleLifetime();
using IHost host = builder.Build();
await host.RunAsync();
앞의 코드가 하는 역할은 다음과 같습니다.
- UseOrleans 메서드와 함께 Orleans를 사용하도록 IHost를 구성합니다.
- localhost 클러스터링 공급자를 UseLocalhostClustering(ISiloBuilder, Int32, Int32, IPEndPoint, String, String) 메서드와 함께 사용되도록 지정합니다.
host
을 실행하고 Ctrl+C 또는SIGTERM
을 수신하여 프로세스가 종료되기를 기다립니다.
클라이언트 만들기
마지막으로, 조직과 통신하도록 클라이언트를 구성하고, 클러스터(안에 단일 사일로가 있음)에 연결하고 조직을 호출해야 합니다. 클러스터링 구성은 사일로에 사용한 구성과 일치해야 합니다. 자세한 내용은 클러스터 및 클라이언트를 참조하세요.
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.DependencyInjection;
using GrainInterfaces;
IHostBuilder builder = Host.CreateDefaultBuilder(args)
.UseOrleansClient(client =>
{
client.UseLocalhostClustering();
})
.ConfigureLogging(logging => logging.AddConsole())
.UseConsoleLifetime();
using IHost host = builder.Build();
await host.StartAsync();
IClusterClient client = host.Services.GetRequiredService<IClusterClient>();
IHello friend = client.GetGrain<IHello>(0);
string response = await friend.SayHello("Hi friend!");
Console.WriteLine($"""
{response}
Press any key to exit...
""");
Console.ReadKey();
await host.StopAsync();
애플리케이션 실행
솔루션을 빌드하고 Silo를 실행합니다. Silo가 실행 중이라는 확인 메시지가 표시되면 클라이언트를 실행합니다.
명령줄에서 Silo를 시작하려면 Silo의 프로젝트 파일이 포함된 디렉터리에서 다음 명령을 실행합니다.
dotnet run
Silo를 시작하면 수많은 출력이 표시됩니다. 다음 메시지가 표시되면 클라이언트를 실행할 준비가 된 것입니다.
Application started. Press Ctrl+C to shut down.
클라이언트 프로젝트 디렉터리에서 별도의 터미널 창에서 동일한 .NET CLI 명령을 실행하여 클라이언트를 시작합니다.
dotnet run
.NET 앱을 실행하는 방법에 대한 자세한 내용은 dotnet 실행을 참조하세요. Visual Studio를 사용하는 경우 여러 시작 프로젝트를 구성할 수 있습니다.
참고 항목
.NET