1

我正在为一家可能只有十台机器的小型企业设计一个新的解决方案。业务太小了,他们甚至没有运行 24/7 的服务器,因此,选择 NServiceBus/RavenDB 似乎是可靠的排队操作的明显选择,所以我可以练习开发一个服务器从客户的角度来看,不等于(或多或少)一个美化的存储库。

到目前为止,我的设计是一台服务器和许多客户端。在第一天,会处理命令并发送事件,指示对象 X、Y 或 Z 的状态已更改,从而使客户端有机会更新其本地 RavenDB 缓存以进行可靠的即时查询。然而,我似乎无法解决的问题是,当企业决定将来使用新机器时会发生什么?这台新机器在第 0 天没有启动,因此没有屏幕截图可用于与所有其他机器同步状态。

可以肯定的是,我的服务器正在通过典型的 SQL 数据库保存“屏幕截图”,以防服务器出现故障,但是如何在(几乎纯)CQRS 解决方案中将这些屏幕截图适当地传达给新客户端?

客户端是否应该发送一个命令来要求一个巨大的屏幕截图从哪里开始?

我应该在新客户端的第一天从另一个客户端克隆缓存吗?

客户端是否有能力直接连接到服务器的 SQL 数据库,以便在必要时吸收自己的屏幕截图?

在尝试实现某种事件溯源时,允许客户端连接到服务器的持久性存储是否被认为是不干净/不纯的?(在这种情况下,我不存储事件的审计表,而是依赖客户端将事件投射到他们的缓存中,这会影响事件源。)

4

1 回答 1

0

如果您实施IWantToRunWhenTheBusStarts,您可以往返到您的 SQL 源以在本地提取状态。由于服务可能会重新启动,您只需确保提取正确的数据集。在客户端断开连接一段时间的情况下,这也可能会有所帮助。

于 2013-01-11T16:14:26.327 回答