簡體   English   中英

為SignalR實現背板和消息總線

[英]Implementing backplane and message bus for SignalR

我的團隊正在運行具有負載平衡的IIS Web服務器和MongoDB的環境。 我們希望使用SignalR將通知推送給我們的用戶(將來可能會更多)。 我正在嘗試實現一個新的SignalR ScaleoutMessageBus,以便我們可以使用現有的MongoDB作為SignalR的背板。 我在GitHub上發現了一個看起來像是我想要的東西的實現。 不幸的是,它是針對SignalR 0.5.3實現的,與SignalR 2.0.2完全不兼容。

我正在嘗試更新它以使其正常工作並使以下部分工作:

  • 依賴注入正確加載新的消息總線
  • 正確連接到數據庫並跟蹤尾隨光標以獲取新消息(與SignalR無關)
  • 主題和訂閱似乎使用現有功能

我無法理解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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM