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

时间:2014-04-26 07:36:26

标签: nservicebus cqrs

使用CQRS和事件源时 - 我想知道我的选项是什么,如果它们是由远程事件处理程序而不是我的演示项目中构建的,那么我会自动查询我的读取模型。

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

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

我原本考虑使用NServiceBus请求/响应,但我读到的各种内容都是热烈反对的。

这有什么选择吗?

从评论编辑

我正在做的是使用单独的运行流程在ravendb中构建读取模型以监听事件并保存结果。
我发现检索这些构建模型的结果的唯一选项是让我的表示对象(也就是web api)连接到ravendb。这就是我想要避免的。

为什么?

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

理想情况下,我想要做的是从我的web api向应用程序队列发送数据请求,并等待数据以回复的形式返回。这样我根本不关心我的应用程序进程正在做什么或如何存储数据,我只是得到数据。

我读过有关这种方法的2篇文章 -

这个人说不要这样做 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/

1 个答案:

答案 0 :(得分:1)

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