次の方法で共有


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

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

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

ヒント

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

前提 条件

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

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

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

Visual Studioで構造体を作成する

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

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

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

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

参照の追加

  1. Grains は GrainInterfaces を参照します。
  2. Silo は Grains を参照します。
  3. Client は GrainInterfaces を参照します。

の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

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

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

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

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

上記のコード:

  • メソッドで を使用するように を構成します。
  • メソッドで localhost クラスタリング プロバイダーを使用して指定します。
  • を実行し、 またはをリッスンしてプロセスが終了するまで待機します。

クライアントを作成する

最後に、クライアントを構成して、グレインと通信し、クラスターに接続して (単一のサイロを使用して)、グレインを呼び出します。 クラスタリング構成は、サイロに使用される構成と一致する必要があります。 詳細については、「クラスターとクライアントの」を参照してください。

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 アプリの実行の詳細については、「do tnet run」を参照してください。 Visual Studioを使用している場合は、複数のスタートアップ プロジェクトを構成できます。

関連項目

  • パッケージの一覧
  • 構成ガイド
  • のベスト プラクティス