问题标签 [eventstoredb]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
519 浏览

docker - 无法在所有投影运行的情况下启动 dockerized 事件存储

我正在尝试在 Windows 中使用 docker 运行事件存储,但由于某种原因,我的预测开始停止。

这是我正在执行的

还尝试作为环境变量运行

这是运行 docker 容器 docker 管理员映像后我的预测的显示方式

有谁知道发生了什么?

0 投票
2 回答
1200 浏览

eventstoredb - 如何通过 ID 在 EventStore 中查找事件?

目前我正在为我的公司项目使用 Eventstore(由 Greg Young 编写)。在我的读取模型中,我存储已处理的事件 ID,而不是事件名称。如何使用其 ID 在 Eventstore 中找到该事件?

0 投票
0 回答
854 浏览

c# - 使用内存节点进行 EventStore 集成测试

我想使用 www.eventstore.org 编写一些集成测试来测试我是否能够序列化一些域事件并将它们附加到流中,并检索它们并反序列化它们等。

我一直在试图找出人们通常是如何做到这一点的,我读了一些 Greg Young 关于不同方法的回答(有点过时):

  1. 每次执行集成测试时,我都可以生成不同的流,但我不想这样做,也不想用测试数据污染事件存储
  2. 我可以使用内存中的事件存储。

第二个选项似乎很理想,因为我可以简单地运行一个干净的事件存储,运行我的测试并在最后停止服务器,以便所有数据都消失了。

我已经看到可以使用一个参数来运行事件存储服务器,--mem-db而不是在磁盘中保留任何内容。

问题是:如果运行集成测试的操作系统很可能没有安装事件存储二进制文件,因此没有真正的事件存储服务器可以在内存中运行,那么如何在运行集成测试时使用内存中的事件存储?我不希望我的测试仅仅因为没有在执行测试的机器上安装和启动并运行事件存储而失败。

我知道市场上的一些数据库有一些 nuGet 包,其中包含生产中使用的相同数据库引擎,但作为内存数据库,因此机器上不需要“真实”服务器来运行测试。所有二进制文件都位于项目可用的 DLL 中。

我试图找到一些关于这样的东西是否可用于事件存储的答案。我阅读了一些关于嵌入式客户端 API 的评论,但我发现的文档不是很清楚。其他评论提到了一个叫做 MiniNode 的东西,但同样,这些线程假设太多,还没有找到关于它是什么或如何用于我的测试的清晰描述。

总而言之,任何人都可以提供一个集成测试的示例(如果可能的话,xUnit),其中IEventStoreConnection使用了一个根本没有安装事件存储的内存事件存储?

更新 1:我尝试添加 nuGet 依赖EventStore.Client.Embedded来使用它,以防万一它是我需要的。但它不支持 DotNetCore(标准 2.0),所以我不知道。然后我阅读了这个ClientAPI.NetCore 问题,其中有人建议使用不同的测试方法,即使用 Chocolatey 抓取EventStore然后从代码中执行EventStore.ClusterNode(我会用--mem-db标志来做)。我不确定我是否喜欢这样,至少不超过出于相同目的使用 Docker。我仍然想知道是否有替代方案?

更新 2由于我使用的是 gitlab,因此我通过启动事件存储服务(容器)来运行事件存储的集成测试,该服务将在持续集成步骤结束后立即终止。

这确实回答了我的问题,但它是我需要的解决方案。

更新 3:(2019 年 6 月 21 日)netstandard 2.0 中仍然不支持嵌入式客户端,因此我无法使用它来启动内存节点以进行测试。然而,这里有另一个使用 docker 的选项

EventStore C# API 现在也在 nuGet EventStore.Client 中(当前为 5.0.1)

0 投票
1 回答
287 浏览

database - 将事件溯源用于分布式事务是个好主意吗?

我有 2 个有状态服务集群:mongo 和 elasticsearch 集群。我想保持两个集群的文档同步。

对我来说,这看起来像是一个分布式事务问题,我决定尝试事件溯源,因为它不仅解决了这个问题,而且自然适合我的应用程序。

我决定使用https://eventstore.org来存储事件,并从我的后端订阅更改,然后更新我的有状态集群。

我的后端是无状态的,最终会扩展到多个实例,我担心每个后端实例都会从 eventstore 获取更新并更新有状态的集群,因为更新可能是幂等的,所以每次写入我都会得到 N 个类似的文档。这个问题一般是怎么解决的?

我真的不想为每个集群创建一个单例订阅者,它监听更新,它使这个单例成为单点故障......

0 投票
1 回答
166 浏览

eventstoredb - 一个节点宕机时的 EventStore 3 节点集群行为

在连接到 3 节点事件存储集群后,无论出于何种原因,3 个节点中的一个节点已关闭(可能是 3 个节点中的任何一个),如果客户端现在尝试将一些数据附加到集群会发生什么情况?

它是否将数据写入剩余的两个节点?

行为是确定性的还是取决于哪个节点(主节点或从节点)关闭?

0 投票
1 回答
990 浏览

domain-driven-design - 如何使用 EventStore 在银行账户之间进行 DDD 风格的资金转账?

我们有一个账户 A 和一个账户 B。我们想在 A 和 B 之间转移资金/资金。假设我们有一个账户的聚合根。根据 Eric Evan 的书,我们需要一个域服务来处理传输逻辑。为了立即保持一致性,我们需要在单个事务中修改账户 A 和账户 B。是否可以使用 EventStore 在单个事务中写入两个不同的流(账户 A 和账户 B)?

0 投票
0 回答
293 浏览

c# - 两个节点失败后,三节点集群中的 EventStore 持久订阅不可用

在没有节点优先级的基本 EventStore 3 节点集群中,杀死两个节点后,剩余节点继续选举,但不会为自己声明角色。

客户端(仅测试了 C#/.NET 客户端)能够连接到节点(使用集群配置),但订阅持久订阅或发布到流失败。

此外,此节点的 Web 界面在导航到持久订阅时也会引发异常。该节点在集群选项卡中显示状态“未知”。

一个节点的示例EventStore.ClusterNode参数:

这种行为是设计使然还是我缺少一些配置?

0 投票
1 回答
419 浏览

eventstoredb - EventStore 持久订阅事件数据

我成功连接到EventStore持久订阅并在 C# 中使用 EventStore ClientAPI,我收到了事件。ResolvedEvent一切都很好,除了在我收到表单中的事件引用而不是接收原始事件数据<event_number>@<stream_Id>

这没关系,但要检索事件并处理它需要我再次访问 EventStore 并使用请求事件

有没有办法从持久订阅接收实际的事件数据?

0 投票
3 回答
3266 浏览

c# - 与 Autofac 并行运行 xUnit 集成测试时无法加载类型 Castle.Proxies.IReadinessProxy

我遇到了很多天都无法解决的问题。我使用 xUnit 和 given-then-when 抽象来使测试更具可读性。

我在 EventStore 上使用包装器并运行一些集成测试。它们都运行良好..除了一个在并行运行时失败(并且 xUnit 并行运行),但如果我按顺序运行它们,它们都会成功。

我不明白为什么这会是一个问题,因为每个事实都应该运行构造函数(给定的)和要测试的功能(何时)。在每一个事实中,我都会实例化一个 Autofac ContainerBuilder,构建容器并解析它IComponentContext,所以理论上每个测试都应该像预期的那样是孤立的和幂等的。

这是我不断收到的例外:

这是只有一个 Fact 与其他 Fact 并行运行时失败的测试

任何线索可能发生在这里? 我看过 Autofac 的并发指南:https ://autofaccn.readthedocs.io/en/latest/advanced/concurrency.html但我认为我已经正确使用了组件上下文。

更新 1:仅供参考,这是我使用的 GivenThenWhen 模板。但这里没有什么特别的(我认为!)

更新 2:这是我用于实现和所有测试的 IoCC Autofac 注册方法。有点复杂,因为我使用反射来保持 EventStore 包装器完全通用,但以防万一有人在那里看到可能影响测试的时髦东西..

更新 3:这是整个存储库,以防有人感到无聊并想尝试复制它。它是一个通用的事件存储包装器,用于使用官方 C# 驱动程序为 Greg Young 的事件存储产品实现的事件源。

https://gitlab.com/DiegoDrivenDesign/DiDrDe.EventStore

有趣的是,这个问题似乎每隔一段时间就会消失。事实上,通常在重新启动 PC 后,所有测试都会正常通过。其他时候不是这样,所以我怀疑这与我在运行时加载程序集的事实有关,并且有些东西出了问题:(


2021 年 9 月 9 日更新 我所做的异步执行并不完全正确。有一种方法可以使用 xUnit 实现异步执行,这可能在这种竞争条件中发挥了作用。given-when-then这是我所有测试继承的模式的更好实现。感谢IAsyncLifetime我能够异步(并等待)前提条件和操作本身。

0 投票
3 回答
1168 浏览

cqrs - 您如何确保应用事件以读取模型?

这对于订阅流中所有事件的投影来说很容易,您只需保留应用在读取模型上的最后一个事件的版本。但是当投影是多个流的复合时,你会怎么做?您是否保留参与投影的每个流的版本。但是,如果您不订阅所有事件,那么差距又如何呢?最多您可以断言版本大于上一个。其他人如何处理这个问题?您是否响应每个事件并升级版本?