私のチームは、負荷分散された IIS Web サーバーと MongoDB を備えた環境を実行しています。SignalR を使用して、ユーザーに通知をプッシュしたいと考えています (将来的にはさらに増える可能性があります)。既存の MongoDB を SignalR のバックプレーンとして使用できるように、新しい SignalR ScaleoutMessageBus を実装しようとしています。私が欲しいもののタイプのように見える実装を GitHub で見つけました。残念ながら、これは SignalR 0.5.3 用に実装されており、SignalR 2.0.2 とはまったく互換性がありません。
私はそれを更新して機能させ、次の部分を機能させようとしています:
- 依存性注入は、新しいメッセージ バスを適切にロードします
- データベースに正しく接続し、新しいメッセージの末尾のカーソルをたどります (SignalR 関連ではありません)。
- トピックとサブスクリプションは、既存の機能を使用して機能しているように見えます
ScaleOutMessageBus の一部がどのように動作するか、特にメッセージ ストリームの機能と、それらが全体的な機能にどのように関連しているかを理解するのに苦労しています。SQL バックプレーンを見ると、ストリームへの読み取りとストリームからの書き込みをデータベースへの読み取りと書き込みに置き換えたいと思われますか? あれは正しいですか?
これが私の Send 実装です(動作しているようです)
protected override Task Send(IList<Message> messages)
{
MongoMessageWrapper mw = new MongoMessageWrapper(messages);
if (ConnectionReady)
{
return Task.Factory.StartNew(() => _mongoCollection.Insert(mw)).Catch();
}
return OpenConnection().Then(() => Task.Factory.StartNew(() => _mongoCollection.Insert(mw)));
}
私の MongoMessageWrapperClass は ScaleoutMessage を拡張しますが、末尾のカーソルが参照する _id プロパティを広告します。
これにより、メッセージがデータベースに正しく書き込まれているようです。次のステップは、後続のカーソルが新しいメッセージを見つけたときに呼び出される新しい OnReceived を作成し、Mongo からデータをアンラップして元のメッセージを取得し、それらを既存の ScaleoutMessageBus 基本クラスに渡すことだと思います。
これを行う場合、OnReceived の streamIndex および id 値として何を渡す必要がありますか? また、Send 関数で受信しているメッセージは、OnReceived がパラメーターとして受け取る ScaleoutMessage ではなく Message 型です。IList を ScaleoutMessage に変換する必要がありますか?
カスタム スケールアウト ソリューションとバックプレーンの構築に関するドキュメントを見つけることができませんでした。利用可能なものはありますか(ソースコードを調べて理解する以外に?