チュートリアル: 最小限の Orleans アプリケーションを作成する
このチュートリアルでは、手順に従って、ほとんどの Orleans アプリケーションに共通する基本的な可動部分を作成します。 自己完結型でミニマルなデザインです。
このチュートリアルには、運用環境に役立つ適切なエラー処理やその他の重要なコードがありません。 ただし、Orleans の一般的なアプリ構造を実践的に理解し、自分にとって最も関連性の高い部分に継続的な学習に集中できるようにする必要があります。
前提 条件
プロジェクトのセットアップ
このチュートリアルでは、同じソリューションの一部として 4 つのプロジェクトを作成します。
- グレイン インターフェイスを格納するためのライブラリ。
- グレイン クラスを格納するライブラリ。
- サイロをホストするコンソール アプリ。
- クライアントをホストするコンソール アプリ。
Visual Studio で構造を作成する
既定のコードを、プロジェクトごとに指定されたコードに置き換えます。
- まず、新しいソリューションでコンソール アプリ プロジェクトを作成します。 プロジェクトパーツサイロを呼び出し、ソリューションに
OrleansHelloWorld
名前を付けます。 コンソール アプリの作成の詳細については、「チュートリアル: Visual Studioを使用して .NET コンソール アプリケーションを作成する」を参照してください。 - 別のコンソール アプリ プロジェクトを追加し、
Client
名前を付けます。 - クラス ライブラリを追加し、
GrainInterfaces
名前を付けます。 クラス ライブラリの作成の詳細については、「チュートリアル: Visual Studioを使用して .NET クラス ライブラリを作成する」を参照してください。 - 別のクラス ライブラリを追加し、
Grains
名前を付けます。
既定のソース ファイルを削除する
- Class1.cs を グレインから削除します。
- GrainInterfaces から Class1.cs を削除します。
参照の追加
- Grains は GrainInterfaces を参照します。
- Silo は Grains を参照します。
- Client は GrainInterfaces を参照します。
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.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!
""");
}
}
サイロを作成する
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();
上記のコード:
- UseOrleans メソッドで Orleans を使用するように IHost を構成します。
- localhost クラスタリング プロバイダーを UseLocalhostClustering(ISiloBuilder, Int32, Int32, IPEndPoint, String, String) メソッドと共に使用することを指定します。
host
を実行し、Ctrl+C またはSIGTERM
をリッスンしてプロセスの終了を待機します。
クライアントを作成する
最後に、クライアントを構成してグレインと通信し、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 を使用している場合は、複数のスタートアップ プロジェクトを構成できます。
関連項目
.NET