使用 ncqrs 自动重试并发命令





0/5 (0投票)
如何使用 ncqrs 自动重试并发命令
在 上一篇帖子中,我展示了 Gregory Young 在我参加的波兰克拉科夫的 DDD CQRS 课程中提到的一些伪代码。 在这门课程中,Greg 向我们明确指出数据库锁定是不必要的。 他向我们展示了一些伪代码,说明如何轻松编写一个合并处理程序来处理所有并发冲突。
在我的当前项目中,基于 ncqrs-framework,我实现了一个更简单的版本,该版本仅在发生 ConcurrencyException
时重试每个命令。 为了实现这一点,您可以轻松地围绕 ncqrs CommandService
构建一个包装器。
public class SafeCommandService : CommandService
{
public override void Execute(ICommand command)
{
try
{
base.Execute(command);
}
catch(ConcurrencyException ex)
{
Execute(command);
//Log retry executed
}
}
}
您可以选择在 WCF 服务或任何您想要的地方实现它。 每一个失败的命令都会被重试,直到成功为止。 我用一百个异步 JavaScript 调用进行了测试,这些调用发送了一个非常简单的命令 (PrintLabelCommand
)。 我的领域只处理一个 LabelPrintedEvent
。 当将这些调用发送到服务器时,我的日志显示平均只有 8 次重试。 在我们的情况下,这是可以接受的。 如果您有更复杂的场景,您可能需要更高级的设置,例如 这篇博文 中显示的伪代码。
我仍在寻找一个更好的类名,因为我认为 SafeCommandExecutor
不是最好的名字。 所以,如果您有更好的建议,请告诉我。 我希望这篇文章对大家有所帮助。 和往常一样,请分享…
如果您改进了我的代码,请告诉我,以便我能从中学习。