【问题标题】:Implementing backplane and message bus for SignalR为 SignalR 实现背板和消息总线
【发布时间】:2014-09-28 02:15:36
【问题描述】:

我的团队正在运行具有负载平衡的 IIS Web 服务器和 MongoDB 的环境。我们希望使用 SignalR 向我们的用户推送通知(未来可能更多)。我正在尝试实现一个新的 SignalR ScaleoutMessageBus,以便我们可以使用现有的 MongoDB 作为 SignalR 的背板。我在 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 函数中收到的消息属于 Message 类型,而不是 OnReceived 将其作为参数的 ScaleoutMessage。我应该将 IList 转换为 ScaleoutMessage 吗?

我找不到任何有关构建自定义横向扩展解决方案和背板的文档。有没有可用的(除了通过源代码来弄清楚吗?

【问题讨论】:

    标签: .net mongodb signalr signalr-backplane


    【解决方案1】:

    我遇到了一个article,说明如何为 NServiceBus 实现 ScaleoutMessageBus。您的问题之一是如何处理MessageScaleoutMessage,您似乎可以通过将Message 传递给构造函数来简单地构造ScaleoutMessage。我知道这不是一个完整的答案,但也许它可以帮助下一个在 SO 上找到这个问题的人。

    【讨论】:

      猜你喜欢
      • 2020-04-30
      • 1970-01-01
      • 2010-10-17
      • 1970-01-01
      • 1970-01-01
      • 2014-08-28
      • 2020-07-31
      • 1970-01-01
      • 2013-11-18
      相关资源
      最近更新 更多