次の方法で共有


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

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

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

前提 条件

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

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

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

Visual Studio で構造を作成する

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

  1. まず、新しいソリューションでコンソール アプリ プロジェクトを作成します。 プロジェクトパーツサイロを呼び出し、ソリューションに 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.ClientMicrosoft.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!
            """);
    }
}

サイロを作成する

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

上記のコード:

クライアントを作成する

最後に、クライアントを構成してグレインと通信し、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 が実行されていることを示す確認メッセージが表示されたら、クライアントを実行します。

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

dotnet run

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

Application started. Press Ctrl+C to shut down.

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

dotnet run

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

関連項目