次の方法で共有


チュートリアル: 最小限の Orleans アプリケーションを作成する

このチュートリアルでは、手順に従って、ほとんどの Orleans アプリケーションに共通する基本的な可動部分を作成します。 自己完結型でミニマルなデザインです。

このチュートリアルには、運用環境に役立つ適切なエラー処理やその他の重要なコードがありません。 ただし、一般的な Orleans アプリの構造を実際に理解し、最も関連性の高い部分に継続的な学習に集中できるようにする必要があります。

ヒント

運用対応の Orleans アプリケーションの場合は、 .NET Aspire を使用して、リソース管理、サービス検出、監視、デプロイを簡略化することを検討してください。 Aspireは、クラスタリング、グレインストレージ、リマインダー、ストリーミングの構成を自動的に処理します。 詳細については、 .NET のアスパイア Orleans 統合 に関するページを参照してください。

前提 条件

プロジェクトのセットアップ

このチュートリアルでは、同じソリューションの一部として 4 つのプロジェクトを作成します。

  • グレイン インターフェイスを格納するためのライブラリ。
  • グレイン クラスを格納するライブラリ。
  • サイロをホストするコンソール アプリ。
  • クライアントをホストするコンソール アプリ。

Visual Studio で構造を作成する

既定のコードを、各プロジェクトに指定されたコードに置き換えます。

  1. まず、新しいソリューションでコンソール アプリ プロジェクトを作成します。 プロジェクト Silo を呼び出し、ソリューション OrleansHelloWorldに名前を付けます。 コンソール アプリの作成の詳細については、「チュートリアル: Visual Studioを使用して .NET コンソール アプリケーションを作成する」を参照してください。
  2. 別のコンソール アプリ プロジェクトを追加し、Client名前を付けます。
  3. クラス ライブラリを追加し、GrainInterfaces名前を付けます。 クラス ライブラリの作成の詳細については、「チュートリアル: Visual Studioを使用して .NET クラス ライブラリを作成する」を参照してください。
  4. 別のクラス ライブラリを追加し、Grains名前を付けます。

既定のソース ファイルを削除する

  1. Class1.csグレインから削除します。
  2. GrainInterfaces から Class1.cs を削除します。

参照の追加

  1. GrainsGrainInterfaces を参照します。
  2. SiloGrains を参照します。
  3. ClientGrainInterfaces を参照します。

Orleans のNuGetパッケージを追加する

プロジェクト 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.ServerMicrosoft.Orleans.Client、および Microsoft.Orleans.Sdk は、サイロとクライアントに必要になる可能性が最も高い依存関係をもたらすメタパッケージです。 パッケージ参照の追加の詳細については、NuGet パッケージ マネージャーを使用した Visual Studio での dotnet パッケージの追加またはパッケージのインストールと管理に関するページを参照してください。

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

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!
            """);
    }
}

サイロを作成する

Silo プロジェクトを作成するには、Grains (Silo) をホストして実行するサーバーを初期化するコードを追加します。 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 のプロジェクト ファイルを含むディレクトリから次のコマンドを実行します。

dotnet run

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

Application started. Press Ctrl+C to shut down.

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

dotnet run

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

関連項目