【问题标题】:How to programmatically(java or http) creating a projection in GetEventStore如何以编程方式(java 或 http)在 GetEventStore 中创建投影
【发布时间】:2025-12-02 14:15:01
【问题描述】:

背景

我在一个项目中使用 EventStore(来自geteventstore.com)。 到目前为止,我已经实现了应用程序的写入端。也就是说,我可以读取和写入给定聚合的事件。

现在我处于阅读状态,需要订阅流。我正在使用 java api,一切都在这里工作。

现在的问题

流不存在...我必须创建一个投影,将来自不同流的事件聚合到我的读取模型的单个流中。

如何通过 api 创建投影?最好使用 java api,但 http api 也可以。

详细说明

由于预测是读取模型获取所需确切事件的方法,因此将随着业务需求的变化创建新的预测。因此,我的想法是 readmodel 服务将在启动时检查并可能创建它需要的投影。

在启动服务之前手动创建投影是不可接受的。这就像手动迁移你的 sql db。

【问题讨论】:

  • 想要仅使用 Java 代码自动创建和维护投影代码 - 是否有可能的解决方案?
  • 我很想知道使用 HTTP API 的答案。 eventstore.org/docs/http-api/swagger/… 不清楚在哪里/如何包含投影的 javascript。

标签: java http eventstoredb


【解决方案1】:

来自http://docs.geteventstore.com/dotnet-api/4.0.0/projections/

公共任务CreateContinuousAsync(字符串名称,字符串查询,UserCredentials userCredentials = null)

创建一个将一直运行到日志结束然后继续运行的投影。查询参数包含要创建为一次性投影的 javascript。连续投影具有明确的名称,可以通过此名称启用/禁用

还有其他选项,例如创建一次性投影等。

它指的是 .NET API。由于似乎没有 Java API 的特定文档,我假设它们是相似的。

【讨论】:

  • 你从哪里得到查询字符串?我不希望该查询成为 JS 代码。只想使用 java 从系统创建投影。
  • 查询是 JavaScript 代码,您在使用 Web 界面创建投影时键入它
  • 正如我所想 - 我还检查了 eventstore 文档和用于构建投影的本机 api 尚未发布......所以我想我需要等待,除非发生这种情况。