次の方法で共有


チュートリアル: Hello World

この概要は、Hello World サンプル アプリケーションに関係しています。

Orleans の主要概念には、サイロ、クライアント、および 1 つ以上のグレインが含まれます。 Orleans アプリの作成には、サイロの構成、クライアントの構成、グレインの記述が含まれます。

サイロを構成する

ISiloBuilderといくつかの補助オプション クラスを使用して、プログラムによってサイロを構成します。 すべてのオプションの一覧は、 オプション クラスの一覧にあります。

static async Task<ISiloHost> StartSilo(string[] args)
{
    var builder = Host.CreateApplicationBuilder(args)
        UseOrleans(c =>
        {
            c.UseLocalhostClustering()
                .Configure<ClusterOptions>(options =>
                {
                    options.ClusterId = "dev";
                    options.ServiceId = "HelloWorldApp";
                })
                .Configure<EndpointOptions>(
                    options => options.AdvertisedIPAddress = IPAddress.Loopback)
                .ConfigureApplicationParts(
                    parts => parts.AddApplicationPart(typeof(HelloGrain).Assembly).WithReferences())
                .ConfigureLogging(logging => logging.AddConsole());
        });

    var host = builder.Build();
    await host.StartAsync();

    return host;
}
オプション 使用目的
.UseLocalhostClustering() localhost 上のサイロに接続するようにクライアントを構成します。
ClusterOptions ClusterId は Orleans クラスターの名前です。通信できるように、サイロとクライアントの名前は同じである必要があります。 ServiceId はアプリケーションに使用される ID であり、デプロイ間で変更することはできません。
EndpointOptions サイロに聞く場所を指示します。 この例の場合、loopback を使用します。
ConfigureApplicationParts アプリケーション パーツとしてグレイン クラスとインターフェイス アセンブリを Orleans アプリケーションに追加します。

構成を読み込んだ後、 ISiloHost をビルドし、非同期的に開始します。

クライアントの構成

サイロと同様に、 IClientBuilder と同様のオプション クラスのコレクションを使用してクライアントを構成します。

static async Task<IClusterClient> StartClientWithRetries()
{
    attempt = 0;
    var client = new ClientBuilder()
        .UseLocalhostClustering()
        .Configure<ClusterOptions>(options =>
        {
            options.ClusterId = "dev";
            options.ServiceId = "HelloWorldApp";
        })
        .ConfigureLogging(logging => logging.AddConsole())
        .Build();

    await client.Connect(RetryFilter);
    Console.WriteLine("Client successfully connect to silo host");
    return client;
}
オプション 使用目的
.UseLocalhostClustering() SiloHost の場合と同じ
ClusterOptions SiloHost の場合と同じ

クライアントを構成するための詳細なガイドについては、「構成ガイド」の「 クライアント構成 」セクションを参照してください。

穀物を記述する

グレインは、Orleans プログラミング モデルの主要なプリミティブです。 これらは、分離、分散、永続化のアトミック単位として機能する、 Orleans アプリケーションの構成要素です。 グレインは、アプリケーション エンティティを表すオブジェクトです。 従来の Object-Oriented プログラミングと同様に、グレインはエンティティの状態をカプセル化し、コード ロジックでその動作をエンコードします。 グレインは、相互への参照を保持し、インターフェイスを介して公開されるメソッドを呼び出すことによって対話できます。

詳細については、ドキュメントのOrleans」セクションを参照してください。

次に示すのは、Hello World グレインのコードの主要部分です。

namespace HelloWorld.Grains;

public class HelloGrain : Orleans.Grain, IHello
{
    Task<string> IHello.SayHello(string greeting)
    {
        logger.LogInformation($"SayHello message received: greeting = '{greeting}'");
        return Task.FromResult($"You said: '{greeting}', I say: Hello!");
    }
}

グレイン クラスは、1 つ以上のグレイン インターフェイスを実装します。 詳細については、「 グレイン 」セクションを参照してください。

namespace HelloWorld.Interfaces;

public interface IHello : Orleans.IGrainWithIntegerKey
{
    Task<string> SayHello(string greeting);
}

パーツの連携方法

このプログラミング モデルは、分散 Object-Oriented プログラミングの中心概念に基づいています。 最初に ISiloHost を開始します。 次に、 OrleansClient プログラムを開始します。 MainOrleansClient メソッドは、クライアントを起動するメソッドを呼び出StartClientWithRetries()。 クライアントを DoClientWork() メソッドに渡します。

static async Task DoClientWork(IClusterClient client)
{
    var friend = client.GetGrain<IHello>(0);
    var response = await friend.SayHello("Good morning, my friend!");
    Console.WriteLine($"\n\n{response}\n\n");
}

この時点で、OrleansClientIHello グレインへの参照を作成し、SayHello() インターフェイスを介してそのIHello メソッドを呼び出します。 この呼び出しはサイロ内のグレインをアクティブにします。 OrleansClient は、アクティブになったグレインにグリーティングを送信します。 グレインは、OrleansClientへの応答としてあいさつを返し、それをコンソールに表示します。

サンプル アプリを実行する

サンプル アプリを実行するには、Readme を参照してください。