この概要は、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
プログラムを開始します。
Main
のOrleansClient
メソッドは、クライアントを起動するメソッドを呼び出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");
}
この時点で、OrleansClient
はIHello
グレインへの参照を作成し、SayHello()
インターフェイスを介してそのIHello
メソッドを呼び出します。 この呼び出しはサイロ内のグレインをアクティブにします。
OrleansClient
は、アクティブになったグレインにグリーティングを送信します。 グレインは、OrleansClient
への応答としてあいさつを返し、それをコンソールに表示します。
サンプル アプリを実行する
サンプル アプリを実行するには、Readme を参照してください。
.NET