NEventStore:5.1
简单设置:WebApp (Asp.NET 4.5) == 命令端
我正在寻找不丢失命令的“正确”方法,着眼于 sagas/process-managers,它们可能会无休止地等待从实际上从未处理过的命令产生的事件。
旧:调度员
我最初使用同步命令,但着眼于sagas/process-managers,我认为首先存储它们然后通过 SyncDispatcher (或 AsyncDispatcher) 获取它们会更安全。否则,我担心的是,如果 saga 尝试发送命令并且由于app-crash/powerloss/...导致命令未完成,它将丢失并且没人会知道。
所以我创建了一个命令流并将每个命令附加到它上面。如果该IsDispatched
命令已被处理,则显示。
那行得通。
PollingClient 和 Command-Stream
现在调度程序已经过时,我切换到PollingClient
. 我丢失的是Dispatched
信息。
出现了一个启动问题:
我天真地从当前最新的检查点开始轮询,但是当应用程序重新启动时,有可能在崩溃之前存储了命令但没有执行,因此丢失了(这实际上发生了)。
我刚刚想到了这个想法:
将命令的基本结果作为(非域)事件存储在另一个流中。
此流将包含CommandSucceeded
和CommandFailed
事件。
每当应用程序启动最新的 command-id 或 command-checkpoint-number 时,就会提取用于在该命令之后立即加载命令...
问题
- 我担心的是,同步命令处理会导致丢失传奇生成的命令的危险,错了吗?如果是,为什么?
- 这通常是一个好主意:一个大的命令流吗?
- 这通常是一个好主意:将通用命令结果事件存储在流中吗?