メインコンテンツまでスキップ

グループを Redis や NATS で接続する

MagicOnion のグループは Redis や NATS を使用して複数のサーバーインスタンス間で接続できます。これは SignalR のバックプレーンに相当する仕組みです。

この仕組みを使用するとサーバーのインスタンスを問わず、特定の名前のグループに所属しているクライアントに対してメッセージを送信できます。これによりサーバーのスケールアウトが可能なアーキテクチャーを構築できます。

Redis を使用する

Redis を使用する場合は MagicOnion.Server.Redis パッケージをインストールします。

dotnet add package MagicOnion.Server.Redis

次に AddMagicOnion で返されるビルダーに対して UseRedisGroup メソッドを使用して Redis を使用するよう設定します。

builder.Services.AddMagicOnion()
.UseRedisGroup(options =>
{
//options.ConnectionString = "localhost:6379";
//options.ConnectionMultiplexer = ConnectionMultiplexer.Connect("localhost:6379");
});

UseRedisGroup メソッドはオプション引数としてデフォルトのグループプロバイダーとするかどうかを指定する引数があります。デフォルトのグループプロバイダーとする場合は true を指定します。省略した場合や false を指定した場合は StreamingHub ごとに [GroupConfiguration] 属性を使用してグループプロバイダーを指定する必要があります。

[GroupConfiguration(typeof(RedisGroupProvider))]
public class MyStreamingHub : StreamingHubBase<IMyStreamingHub, IMyStreamingHubReceiver>, IMyStreamingHub
{
// ...
}

NATS を使用する (プレビュー)

NATS のサポートは現時点でプレビューであり、Multicaster のパッケージとして提供されます。 NATS を使用するには Multicaster.Distributed.Nats パッケージをインストールします。

dotnet add package Multicaster.Distributed.Nats

次にサービスに NatsGroupOptions を登録します。

builder.Services.AddSingleton<NatsGroupOptions>(new NatsGroupOptions() { Url = "nats://localhost:4222" });

NATS を使用するグループを使う StreamingHub で [GroupConfiguration] 属性を使用してグループプロバイダーを指定します。

[GroupConfiguration(typeof(NatsGroupProvider))]
public class MyStreamingHub : StreamingHubBase<IMyStreamingHub, IMyStreamingHubReceiver>, IMyStreamingHub
{
// ...
}

デフォルトのグループプロバイダーとしたい場合は以下のように IMulticastGroupProvier を入れ替えます。

builder.Services.RemoveAll<IMulticastGroupProvider>();
builder.Services.AddSingleton<IMulticastGroupProvider, NatsGroupProvider>();

制限事項

  • クライアント結果はサポートされません
  • Count, CountAsync メソッドはサポートされません