3

我的团队正在运行具有负载平衡的 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 类型,而不是 OnReceived 将其作为参数的 ScaleoutMessage。我应该将 IList 转换为 ScaleoutMessage 吗?

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

4

1 回答 1

3

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

于 2014-09-27T18:15:36.647 回答