【问题标题】:Querying EventStoreDB with java API or HTTP API使用 java API 或 HTTP API 查询 EventStoreDB
【发布时间】:2020-12-26 20:30:34
【问题描述】:

我最近一直在使用出色的 Greg Young 出色的 Event Store DB,它很好。但是文档很糟糕,它已经过时,有时不正确,并且通过网站分发。有时您必须查找多个不相关的页面才能破坏文档背后的代码!

不管怎样,不仅是文档,Java API 也很糟糕,而且大多数时候你不得不使用 HTTP API。

我已经在 HTTP API 的基础上构建了自己的 Java API。

我一直在为投影而苦苦挣扎,我能够创建多个投影(连续、一次、瞬态),并且效果很好,并且生成的流中填充了投影发出的事件。

所以现在,我知道我应该如何创建新的投影,这将创建填充了我想要的事件的流,这些事件由 when 子句中的给定条件过滤

我还在文档中读到我们可以对事件存储进行时间查询,但我们应该借助 Catch-up 订阅填充另一个读取模型,我对此很好并且知道 CQRS 是什么。我正在使用 MongoDB 为报告创建读取模型。

我遇到的困难是时间查询。我找不到任何关于我应该如何进行查询的文档。但我猜我应该首先为每个查询创建一个一次性投影,然后我应该将结果发送到一个新的流名称“query-{id}”。然后我立即尝试从新查询流中读取事件,但是创建查询流并用结果事件填充它需要时间。因此,我的查询 API 创建了一个投影并立即请求结果流上的事件,但它得到 404,这意味着该投影尚未开始处理和生成新流。

那么,有没有什么方法可以传递事件存储一个投影并询问它的事件?

我理解的一件事是实际上没有办法实时查询事件存储,但我们应该创建一个投影,它将创建一个流并用结果和平均值填充它,同时我们应该继续询问流是否是已创建以及投影是否完成。

我为每个聚合创建了一个新流,一切正常。而且我有一个单独的有界上下文来报告整个系统,它使用 MongoDB 并且可以正常工作。但有时我需要查询事件以检查不变量。例如,我需要检查“产品”标题是否唯一并抛出异常。为了进行这样的检查,我应该为每个有界上下文中的聚合创建一个单独的读取模型。但是我想通过向事件存储询问所有具有相同标题的“ProductCreated”事件来进行此类查询,然后我想处理所有这些事件以查看我们是否有一个具有相同标题的产品。

那么,我如何向事件存储询问所有 ProductCreated 事件,其中 title 等于某个值并立即获得结果?

或者事件存储数据库不是为此类用例设计的?!

【问题讨论】:

    标签: projection querying eventstoredb


    【解决方案1】:

    很遗憾听到您对文档的体验。我不确定您是否注意到,但我们在几周前发布了新文档,而旧文档网站在横幅中明确指出它已过时。

    JVM 客户端(不是 Java 客户端)不是由 Event Store 制作的。 new client 目前正在开发中,但它是 20.6 客户端,仅支持 gRPC。

    您的问题有很多内容,我不确定我是否全部理解。如果可能的话,最好把问题分开。

    我可以回复我理解的,关于阅读相同类型的事件。系统by event type 投影生成您可能愿意从中读取的流(在您的示例中为$et-ProductCreated),但我不确定它是否能解决您的用例,因为您可能还会遇到ProductRenamed 之类的事件,而您我也需要处理它。

    我不会真正将这种情况视为“不变”,因为如果两种产品意外获得相同的标题,您的系统不太可能变得不一致。这取决于您希望在系统中同时注册和重命名的产品数量。如果您以每秒 100 个产品的速度注册了新产品,那么您可能无论如何都无法读取所有 ProductCreated 事件来确定新名称是否与另一个名称重复。如果您每小时有一个产品,那么对 MongoDB 进行简单的投影将是检查重复项最简单、最快的方法。

    我建议打开另一个关于时间查询的问题。

    【讨论】:

    • 感谢您的回复。我真的很感激。上面横幅上的链接只是重定向到同一页面,该页面声明此文档适用于 v5。我首先安装了 v20,但我有使用它有很多困难,并且文档与 v5 保持一致。所以我切换到 v5,所以我正在写你建议的时间查询的新问题,我现在会在这里评论链接
    • 请按照您的建议检查此后续问题:stackoverflow.com/questions/63795724/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-02
    • 2014-12-28
    相关资源
    最近更新 更多