フロントエンドの役割
フロントエンドは、www と Orleans の世界のゲートウェイの役割を果たします。
( REST API と Orleans 独自の世界を相互変換する境界)
公開されている REST API への HTTP リクエストを受信して、リクエストを処理すべき Grain に対してメソッドをコールし、 Grain からレスポンスを受け取り、 HTTP リクエストにレスポンスを返します。
なお、 フロントエンドは Orleans クラスターから見ればクライアントでもあります。
フロントエンドの実装例
Minimum なフロントエンドの実装としては、ASP.NET Core Minimal Web API のプロジェクトで REST API を定義し、Generic Host で Orleans クラアントを起動し、Grain プロキシオブジェクトのメソッドをコールし、戻り値を返します。
using Orleans.Configuration; using OrleansPoc; var host = await StartClientAsync(); var client = host.Services.GetRequiredService<IClusterClient>(); var hello = client.GetGrain<IHello>(Guid.NewGuid()); var writeLargeData = client.GetGrain<IWriteLargeData>(Guid.NewGuid()); var app = WebApplication.Create(); app.MapGet("/", async () => await hello.Call()); app.MapGet("/hello", async () => await hello.SayHello($"Konnichiwa!!")); app.MapGet("/deactivate", async () => await hello.Deactivate()); app.MapGet("/writelargedata", async () => await writeLargeData.WriteLargeData()); await app.RunAsync(); static async Task<IHost> StartClientAsync() { var connectionString = Environment.GetEnvironmentVariable("ORLEANS_AZURE_STORAGE_CONNECTION_STRING"); var builder = new HostBuilder() .UseOrleansClient(client => { client .UseAzureStorageClustering( options => options.ConfigureTableServiceClient(connectionString)) .Configure<ClusterOptions>(options => { options.ClusterId = "PoCCluster"; options.ServiceId = "OrleansPoC"; }); }) .ConfigureLogging(logging => logging.AddConsole()); var host = builder.Build(); await host.StartAsync(); return host; }
次の記事はこちらです。
hiro128.hatenablog.jp