다음을 통해 공유


자습서: 최소 Orleans 애플리케이션 만들기

이 자습서에서는 단계별 지침에 따라 대부분의 Orleans 애플리케이션에 공통적인 기본 이동 부분을 만듭니다. 독립적이고 미니멀하게 설계되었습니다.

이 자습서는 프로덕션 환경에 유용한 적절한 오류 처리 및 기타 필수 코드가 부족합니다. 그러나 Orleans에 대한 일반적인 앱 구조를 실습하고 가장 관련성이 큰 부분에 대한 지속적인 학습에 집중할 수 있도록 도와줍니다.

필수 조건

프로젝트 설정

이 자습서에서는 동일한 솔루션의 일부로 4개의 프로젝트를 만듭니다.

  • 조직 인터페이스를 포함하는 라이브러리
  • 조직 클래스를 포함하는 라이브러리
  • 사일로를 호스트하는 콘솔 앱
  • 클라이언트를 호스트하는 콘솔 앱

Visual Studio에서 구조 만들기

기본 코드를 아래의 각 프로젝트에 지정된 코드로 바꿉니다.

  1. 먼저 새 솔루션에서 콘솔 앱 프로젝트를 만듭니다. 프로젝트 파트 사일로를 호출하고 솔루션의 이름을 OrleansHelloWorld로 지정합니다. 콘솔 앱을 만드는 방법에 대한 자세한 내용은 자습서: Visual Studio를 사용하여 .NET 콘솔 애플리케이션 만들기를 참조하세요.
  2. 다른 콘솔 앱 프로젝트를 추가하고 이름을 Client로 지정합니다.
  3. 클래스 라이브러리를 추가하고 이름을 GrainInterfaces로 지정합니다. 클래스 라이브러리를 만드는 방법에 대한 자세한 내용은 자습서: Visual Studio를 사용하여 .NET 클래스 라이브러리 만들기를 참조하세요.
  4. 다른 클래스 라이브러리를 추가하고 이름을 Grains로 지정합니다.

기본 원본 파일 삭제

  1. Grains에서 Class1.cs를 삭제합니다.
  2. GrainInterfaces에서 Class1.cs를 삭제합니다.

참조 추가

  1. GrainsGrainInterfaces를 참조합니다.
  2. SiloGrains를 참조합니다.
  3. ClientGrainInterfaces를 참조합니다.

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();

앞의 코드가 하는 역할은 다음과 같습니다.

클라이언트 만들기

마지막으로, 조직과 통신하도록 클라이언트를 구성하고, 클러스터(안에 단일 사일로가 있음)에 연결하고 조직을 호출해야 합니다. 클러스터링 구성은 사일로에 사용한 구성과 일치해야 합니다. 자세한 내용은 클러스터 및 클라이언트를 참조하세요.

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를 사용하는 경우 여러 시작 프로젝트를 구성할 수 있습니다.

참고 항목