我正在为可能十台机器的小型企业构建一个新的解决方案。业务非常小,他们甚至没有全天候运行的服务器本身,因此,选择NServiceBus / RavenDB似乎是可靠的排队操作的明显选择,因此我可以练习开发一个服务器从客户的角度来看,不等于(或多或少)一个美化的存储库。
到目前为止,我的设计是一台服务器和许多客户端。在第一天,处理命令并发送事件,指示对象X,Y或Z的状态已更改,允许客户端更新其本地RavenDB高速缓存以进行可靠的即时查询。然而,我似乎无法解决的问题是,当企业决定将来加入新机器时会发生什么?这台新机器没有在第0天启动,因此没有屏幕截图可以将状态与所有其他机器同步。
可以肯定的是,我的服务器通过典型的SQL数据库保存“屏幕截图”,以防服务器出现故障,但如何在(几乎纯粹的)CQRS解决方案中将这些屏幕截图适当地传达给新客户?
客户端是否应该发送一个命令,要求从中开始一个巨大的屏幕截图?
我应该为新客户的第一天克隆来自其他客户端的缓存吗?
客户端是否有能力直接连接到服务器的SQL数据库,以便在必要时同化自己的屏幕截图?
在尝试实现某些类似的事件源时,允许客户端连接到服务器的持久性存储区是否被视为不洁/不纯? (在这种情况下,我不存储事件的审计表,而是依靠客户端将事件投影到缓存中,从而影响事件源。)
答案 0 :(得分:0)
如果您实现IWantToRunWhenTheBusStarts
,您可以往返于SQL源以在本地拉取状态。由于服务可能会重新启动,因此您只需确保提取正确的数据集即可。这也可能有助于客户端断开连接一段时间。