用于查询读取模型的存储不可知选项



使用CQRS和Event Sourcing时,我想知道如果读取模型是由远程事件处理程序而不是在我的演示项目中构建的,那么我有什么选项可以不可知地查询它们。

我正在使用NServiceBus发送命令和发布事件,并且我已经配置了一个应用程序项目来侦听RavenDB中的事件并构建读取模型。

我会从RavenDB中读取我的演示项目,但这会将我的演示层锁定为使用RavenDB或我的事件监听器使用的任何其他内容,我希望保持演示层的不可知性。

我最初考虑的是使用NServiceBus请求/响应,但我读过很多关于这一点的文章。

有什么选择吗?

从评论编辑

我正在做的是在ravendb中使用一个单独的运行过程来构建读取模型,以侦听事件并保存结果
我找到的检索这些构建模型结果的唯一选项是让我的演示对象(又名web api)连接到ravendb。这就是我试图避免的。

为什么

如果我想旋转我的web api的20个实例来平衡请求,除了我已经连接的许多读取模型构建过程之外,每个实例都必须连接到ravendb。让ravendb成为瓶颈。

理想情况下,我想做的是从我的web api向应用程序队列发送一个数据请求,然后等待数据以回复的形式返回。通过这种方式,我根本不关心我的应用程序进程在做什么,也不关心它们如何存储数据,我只是获取数据。

我读过两篇关于这种方法的文章-

这个说不要这么做http://andreasohlund.net/2010/04/22/messaging-shouldnt-be-used-for-queries/

这个说去吧http://www.udidahan.com/2007/11/10/asynchronous-high-performance-login-for-web-farms/

如果你做得对,你就选择了一个非常专注于手头阅读任务的阅读模型。除非你认为你要换掉它,否则直接使用该产品!针对关系读取模型,使用简单的SQL接口(例如jdbc、ado.net)。将Cypher用于图形模型。对键值存储使用本机API。不要再添加另一个抽象;这就是将读写分开的主要目的。

最新更新