テストしていませんが、このようなものはSQLスケールアウトバスで動作するはずです。
RabbitMQ をバックプレーンとして使用するスケールアウト バスであるSignalR.RabbitMQ プロジェクトから。
基本的に、コンソール プロジェクトでメッセージ バスを構成します。ブロードキャスト先のハブへの参照を取得します。その後、メッセージを送信してください...
var factory = new ConnectionFactory
{
UserName = "guest",
Password = "guest"
};
var exchangeName = "SignalR.RabbitMQ-Example";
var configuration = new RabbitMqScaleoutConfiguration(factory, exchangeName);
GlobalHost.DependencyResolver.UseRabbitMq(configuration); ;
var hubContext = GlobalHost.ConnectionManager.GetHubContext<Chat>();
Task.Factory.StartNew(
() =>
{
int i = 0;
while (true)
{
hubContext.Clients.All.onConsoleMessage(i++);
System.Console.WriteLine(i);
Thread.Sleep(100);
}
}
);
マークの答えは正しいが >>>>>>>>>>>>>>>>>>>>>
これを SQL Server スケールアウトで機能させるために私がしなければならなかったことは次のとおりです。
更新サービス:
メッセージをクライアントに送信するハブ クラスの正確なレプリカを作成 (または単に参照) します。ハブ クラスには、メッセージが通過できるようにするプレースホルダー メソッドを含める必要があります。
public class DataHub : Hub {
// other hub methods here ...
public void RefreshData(SomeAppropriateType messageData)
{
// Placeholder method for tunneling data refreshes through the SQL Server scaleout backplane
}
}
SQL Server データベースを登録します。
var signalrDbConnectionString = ConfigurationManager.ConnectionStrings["signalr"].ConnectionString;
GlobalHost.DependencyResolver.UseSqlServer(signalrDbConnectionString);
routes.MapHubs();
ハブ プロキシ クラスを介してすべてのクライアントにメッセージをブロードキャストします。
var messageData = // instantiate the parameter value of the RefreshData method in the hub class
var hubContext = GlobalHost.ConnectionManager.GetHubContext<DataHub>();
Task.Factory.StartNew(() => hubContext.Clients.All.RefreshData(messageData)).Wait();
Webサイト:
更新サービスの同じ最初のステップ。
前と同じように SQL Server データベースを登録しますが、Web アプリのグローバル セットアップのどこかに登録します。
メッセージを受信するには、次の行に沿って適切なページの JavaScript を記述します。
function listenForUpdates() {
if (updater === undefined) {
updater = $.connection.dataHub;
}
if (updater !== undefined) {
// Declare a function on the hub so the server can invoke it
updater.client.refreshData = function (value) {
// for debugging: console.log(value);
// update the appropriate page elements with the new data
};
}
}