チュートリアル: 最小限の 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 パッケージ
Silo Microsoft.Orleans.Server
Microsoft.Extensions.Logging.Console
Microsoft.Extensions.Hosting
クライアント Microsoft.Orleans.Client
Microsoft.Extensions.Logging.Console
Microsoft.Extensions.Hosting
Grain Interfaces Microsoft.Orleans.Sdk
グレイン Microsoft.Orleans.Sdk
Microsoft.Extensions.Logging.Abstractions

Microsoft.Orleans.ServerMicrosoft.Orleans.ClientMicrosoft.Orleans.Sdk は、サイロとクライアント側で最も必要性の高い依存関係をもたらすメタパッケージです。 パッケージ参照の追加の詳細については、「dotnet add package」 または 「NuGet パッケージ マネージャーを使用して Visual Studio でパッケージをインストールして管理する」 を参照してください。

グレイン インターフェイスを定義する

GrainInterfaces プロジェクトで、IHello.cs コード ファイルを追加し、その中で次の IHello iインターフェイスを定義します:

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

上記のコードでは次の操作が行われます。

クライアントを作成する

最後に、グレインと通信するようにクライアントを構成し、クラスターに接続して (1 つのサイロを含む)、グレインを呼び出す必要があります。 クラスタリング構成は、サイロに使用した構成と同じである必要があることに注意してください。 詳細については、「クラスターとクライアント」を参照してください

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 が実行されていることを示す確認メッセージが表示されたら、Client を実行します。

コマンド ラインから Silo を開始するには、Silo のプロジェクト ファイルを含むディレクトリから次のコマンドを実行します:

dotnet run

サイロのスタートアップの一部として、多数の出力が表示されます。 次のメッセージが表示されたら、クライアントを実行する準備ができました:

Application started. Press Ctrl+C to shut down.

クライアント プロジェクト ディレクトリから、別のターミナル ウィンドウで同じ .NET CLI コマンドを実行して、クライアントを起動します:

dotnet run

.NET アプリの実行の詳細については、dotnet run を参照してください。 Visual Studio を使用している場合は、複数のスタートアップ プロジェクトを構成 できます。

関連項目