[英]Implementing backplane and message bus for SignalR
我的團隊正在運行具有負載平衡的IIS Web服務器和MongoDB的環境。 我們希望使用SignalR將通知推送給我們的用戶(將來可能會更多)。 我正在嘗試實現一個新的SignalR ScaleoutMessageBus,以便我們可以使用現有的MongoDB作為SignalR的背板。 我在GitHub上發現了一個看起來像是我想要的東西的實現。 不幸的是,它是針對SignalR 0.5.3實現的,與SignalR 2.0.2完全不兼容。
我正在嘗試更新它以使其正常工作並使以下部分工作:
我無法理解ScaleOutMessageBus的某些部分是如何工作的,特別是消息流的功能以及它們與整體功能的關系。 看看SQL背板,看起來我想通過讀寫數據庫來替換讀寫流和從流中讀取數據? 那是對的嗎?
這是我的發送實現(似乎工作)
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函數中收到的消息也是Message而不是ScaleoutMessage,而OnReceived則將其作為參數。 我應該只將IList轉換為ScaleoutMessage嗎?
我無法找到有關構建自定義擴展解決方案和背板的任何文檔。 有沒有可用的(除了瀏覽源代碼以解決它?
我遇到了一篇關於如何為NServiceBus實現ScaleoutMessageBus
的文章。 你如何處理Message
vs ScaleoutMessage
問題似乎是你可以通過將Message
傳遞給構造函數來構造一個ScaleoutMessage
。 我知道這不是一個完整的答案,但也許它可以幫助下一個發現這個問題的人。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.