问题标签 [neventstore]
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.
neventstore - 当使用超过 1 个线程时,带有 NServiceBus 的 EventStore 会导致死锁
我目前正在开发一个使用 EventStore、CommonDomain 和 NServiceBus 的项目,当我将 NumberOfWorkerThreads 设置为 1 时,我们所有的服务(nservicebus - 我们有 6 个,每个都有自己的事件存储)运行完美,但是当我将 NumberOfWorkerThreads 设置为不止一个,我开始看到大量死锁,我的意思是每分钟至少 50 个。所有的死锁都在 Commits 表上。根据我的发现,看起来我正在多个线程中更新相同的聚合,这很容易在每个说的目录和导入过程中发生,并且我在一个线程中更新数量,同时在另一个线程中更新价格线程,所以两个线程都试图更新同一个聚合。
有没有其他人遇到过这个问题,你是如何解决的?
c# - EventStore 和 RavenDB 持久性 JsonReaderException
试图将JOliver 的 EventStore与RavenDB 连接起来,但遇到了麻烦。我在 Raven 中创建了一个名为 RavenEventStore 的新数据库。
以下是我的接线图;
当调用 Wireup.Init() 时,此异常发生在 RavenDb 端;
网址:“/indexes/RavenCommitByDate”Newtonsoft.Json.JsonReaderException:解析值时遇到意外字符:。第 1 行,位置 1。在 Newtonsoft.Json.JsonTextReader.ParseValue(Char currentChar) in d:\Development\Releases\Json\Working\Src\Newtonsoft.Json\JsonTextReader.cs:Newtonsoft.Json.JsonTextReader.ReadInternal 的第 699 行() 在 d:\Development\Releases\Json\Working\Src\Newtonsoft.Json\JsonTextReader.cs:line 499 at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.ReadForType(JsonReader reader, Type t, JsonConverter propertyConverter) in d:\ Development\Releases\Json\Working\Src\Newtonsoft.Json\Serialization\JsonSerializerInternalReader.cs:Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType) 中的第 1072 行:
我也可以在 RavenDB 日志中看到异常;
我试图通过删除 UsingAsynchronousDispatchScheduler() 方法来消除所有可能性,并引发相同的错误。我使用的代码严格来自此处的示例: https ://github.com/joliver/EventStore/blob/master/doc/EventStore.Example/MainProgram.cs
有没有人经历过这个?在谷歌上也找不到任何东西。
neventstore - J Oliver EventStore - 示例异常
当我在 doc 中运行 EventStore 示例时,它在 SqlPersistenceFactory.cs 第 39 行抛出异常: Value can not be null 参数:方言
app.config中的连接字符串是否错误?</p>
cqrs - 使用 CQRS 和 EventStore 创建并发
基线信息: 我正在使用外部 OAuth 提供程序进行登录。如果用户登录到外部 OAuth,他们可以进入我的系统。但是,此用户可能尚不存在于我的系统中。这不是真正的技术问题,但我使用 JOliver EventStore 是为了它的价值。
逻辑:
- 我没有为新用户提供指南。我只有一个电子邮件地址。
- 我在发送命令之前检查我的读取模型,如果用户电子邮件存在,我会发出带有 ID 的登录命令,如果不存在,我会发出带有生成 ID 的 CreateUser 命令。我的问题是新用户的情况。
- 使用新 ID 在事件存储中进行保存。
问题: 假设由于浏览器刷新或在实现与读取模型的一致性之前发生的一些其他异常,在读取模型更新之前以某种方式发出了两个创建命令。没关系,这不是我的问题。
发生了什么: 因为新 ID 是一个 Guid 梳,所以事件存储不可能知道这两个 CreateUser 命令代表同一个用户。当他们到达读取模型时,读取模型将知道(因为他们有相同的电子邮件)并且可以合并两条记录或采取其他一些补偿措施。但是现在我的读取模型与事件存储不同步,事件存储仍然认为这是两个独立的实体。
也许没关系,因为:
- 重放事件将对读取模型产生相同的影响,因此应该没问题。
- 因为这两个命令都是重复的“创建”命令,所以它们应该包含相同的信息,所以我不会在事件存储中丢失任何东西。
谁能说明他们如何处理类似问题?如果需要进行一些补偿操作,读取模型服务是否会在意识到它有重复条目时发出某种补偿命令?有没有我不考虑的更简单的方法?
mongodb-.net-driver - 为 NEventStore 设置 mongodb 持久性时需要为每种事件类型注册 BsonClassMap?
在为Oliver 的 EventStore设置 mongodb 持久性时,是否BsonClassMap
需要为每种事件类型注册?如果我不这样做,我会得到异常Unknown discriminator value 'InventoryItemCreated'
。我向 MongoDB 注册了所有事件类型,就像我在这里描述的那样,然后配置我的事件存储:
这真的有必要吗?
我在修改 Greg Young 的“最简单的事情”以支持具有 MongoDB 持久性的 Oliver 的事件存储时遇到了这个问题,代码在 github 上。
一些相关的观察 (tldr)
如果我不注册事件类型,我可以从一个空的事件存储开始(因为事件不需要反序列化)。我可以添加一个库存项目,我的事件存储有一个提交:
当我重新启动应用程序并重播此单个事件时,它无法反序列PayLoad.Body
化,因为Unknown discriminator value 'InventoryItemCreated'
.
我找到了两种成功重播InventoryItemCreated
事件的替代方法:
- 当我在重播之前创建另一个库存项目时,我可以重播所有事件;显然 MongoDB 然后知道鉴别器。
- 手动将鉴别器更改为完整的类型名称:
让我感到有点尴尬的是,系统显然可以在不注册所有事件类型的情况下工作,但是选择了一个默认的鉴别器确定策略来防止这种情况。
c# - 从 EventStore 获取事件
如果我想根据存储在 ES 中的所有历史事件填充新的 Viewmodel,我该怎么做?
我可以看到,IPersistStreams.GetFrom(DateTime)
但一口气把它们全部搞定似乎有点吓人。
我认为分批获取它们是我正在寻找的。
EventStore 3.0 是我正在使用的。
cqrs - Jonathan Oliver 的 EventStore 是否积极开发?
我正在启动一个将在 Windows Azure 上托管的新项目。我使用 RavenDb 作为后端,我想使用 CQRS 和事件源。
我阅读了关于 Jonathan 的 EventStore 的好评,它非常适合我的架构,因为它是一个薄层并且可以将 RavenDb 用作存储。现在,我注意到 3.0 版本(最新的官方版本)已经有一年了,而新的 3.1 版本还没有发布(分支中有一些活动)。我想选择 3.1 版本,因为它集成了 CommonDomain 项目,但我对分别引用 3.0 版和当前 CommonDomain 没有任何问题。
我只是想知道 EventStore 是否正在积极开发并会得到维护,尤其是在 Greg Young 发布了他的 EventStore (geteventstore.com) 之后。我有点不愿意去做,因为它具有自己的持久性和 AFAIK,我无法将我的事件存储在我的 RavenDb 中。
所以总结一下:
- Jonathan 的 EventStore 上线了吗?
- 如果是,我是否应该选择当前的官方 3.0 版本并单独参考 CommonDomain 项目?
- 3.1 分支(与 CommonDomain 合并)准备好了吗?
- 我到底应该切换到 Greg Young 的 EventStore 吗?
- 或者我应该调查 Lokad.CQRS?(我不认为它使用乔纳森的 EventStore)
PS。我不介意分叉 joliver 的 EventStore 并贡献修复/次要功能。
c# - 未设置 JOliver EventStore 调度标志,每次重启时重播事件
我正在使用 EventStore,一切似乎都在工作,事件由我的内存代理存储和调度,事件由我的读取模型处理。但是由于某种原因,EventStore Commits 表中的“已调度”标志没有设置,所以每次我重新启动我的应用程序时,它都会重播所有事件。我使用 SQL Server 2012 作为存储。没有发生错误。知道为什么这个标志不会被设置吗?
我的代码:
cqrs - Eventstore 调度标志在重新启动时设置为 true
我正在使用 JOliver 的 EventStore,现在我正在使用同步调度程序,这样当命令进入时,它会由我的命令处理程序处理,然后保存在事件存储中,然后我的事件处理程序更新我的读取模型。在这个阶段我没有使用 NServiceBus,但我希望稍后介绍它。我的 eventstore 数据库和 readmodel 在同一台机器上。
我注意到的是,如果在我的事件处理程序中引发异常(并且因为我没有使用 DTC),则事件将在事件存储中提交,并且调度标志设置为 false。这是我所期望的,但是当我重新启动服务器时,该标志设置为 true,但从未调用事件处理程序代码。
任何想法为什么会发生这种情况?
我假设任何未调度的事件都会被调度,或者在事件存储代码中会有一些重试机制。
ravendb - 用于多租户应用的具有 Raven 持久性的 CommonDomain / EventStore
我应该如何在多租户应用程序中设置 EventStore 的 RavenPersistence?
我有一个 Azure 辅助角色来处理通过服务总线接收到的命令。每条消息可能属于不同的租户。实际的租户是在消息头中发送的,这意味着我只有在收到每条消息后才知道要使用哪个数据库。
我正在使用 CommonDomain,所以我的命令处理程序已经IRepository
注入。
现在我在处理每条消息时建立了一个新商店(我设置了 DefaultDatabase),但我觉得这可能不是最理想的方式。
- 有没有办法创建一个事件存储然后只切换数据库?
- 如果没有,我可以为每个租户缓存商店吗?
- 你知道任何使用 EventStore 和 RavenDB 的多租户示例吗?