SignalR 1.1 のベータが公開されて、スケールアウトプロバイダもさらに新しくなりましたね。内容に関しては開発者の Devid Fowler 氏のブログが最高にわかりやすいです。
SignalR 1.1 beta - Unhandled Exception
ちょっと指定方法が変わったのと、エラー処理周りの機能が増えたので 3 種類のスケールアウトプロバイダについてまとめておきます。
Redis
インストール
Install-Package Microsoft.AspNet.SignalR.Redis -Pre
設定
// RedisScaleoutConfiguration を使って指定する var config = new RedisScaleoutConfiguration("SERVER_NAME", 6379, "PASSWORD", "WebApplication1") { RetryOnError = true, OnError = ex => Trace.WriteLine(ex.ToString()) }; GlobalHost.DependencyResolver.UseRedis(config); // 接続情報だけを指定する GlobalHost.DependencyResolver.UseRedis("SERVER_NAME", 6379, "PASSWORD", "WebApplication1");
Service Bus
インストール
Install-Package Microsoft.AspNet.SignalR.ServiceBus -Pre
設定
// ServiceBusScaleoutConfiguration を使って指定する var config = new ServiceBusScaleoutConfiguration("CONNECTION_STRING", "WebApplication1") { RetryOnError = true, OnError = ex => Trace.WriteLine(ex.ToString()) }; GlobalHost.DependencyResolver.UseServiceBus(config); // 接続情報だけを指定する GlobalHost.DependencyResolver.UseServiceBus("CONNECTION_STRING", "WebApplication1");
SQL Server
インストール
Install-Package Microsoft.AspNet.SignalR.SqlServer -Pre
設定
// SqlScaleoutConfiguration を使って指定する var config = new SqlScaleoutConfiguration("CONNECTION_STRING") { RetryOnError = true, OnError = ex => Trace.WriteLine(ex.ToString()) }; GlobalHost.DependencyResolver.UseSqlServer(config); // 接続情報だけを指定する GlobalHost.DependencyResolver.UseSqlServer("CONNECTION_STRING");
SignalR 1.1 ベータのスケールアウトプロバイダから、エラー時にメッセージをバッファリングしてリトライする機能が追加されました。デフォルトでは false となっているので RetryOnError を明示的に true と指定しないと有効になりません。あと、エラー時に呼び出されるデリゲートを指定できるようになったので、スケールアウトプロバイダがちゃんと動いてるか簡単に確認できるようになりましたね。
このスケールアウトプロバイダは最低限の部分が共通化されているので、3 種類ほとんど同じ指定が使えるようになっているのが良いですね。新しい方法が出てきても簡単に拡張できそうです。