我的团队正在运行具有负载均衡的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吗?
我无法找到有关构建自定义横向扩展解决方案和背板的任何文档。有没有可用的(除了浏览源代码以解决它?
答案 0 :(得分:3)
我遇到了article如何为NServiceBus实现ScaleoutMessageBus
。关于如何处理Message
vs ScaleoutMessage
的一个问题,您似乎可以通过将ScaleoutMessage
传递给构造函数来构建Message
。我知道这不是一个完整的答案,但也许它可以帮助下一个在SO上找到这个问题的人。