Nservicebus 什么';在EventStore中处理并发异常的正确方法是什么?

Nservicebus 什么';在EventStore中处理并发异常的正确方法是什么?,nservicebus,cqrs,neventstore,commondomain,Nservicebus,Cqrs,Neventstore,Commondomain,使用JOliver EventStore 3.0并从NServiceBus接收命令,处理并发异常的正确方法是什么?如果我有多个工作线程,这可能是常见的情况 选项1 try { // store the event ... } catch (ConcurrencyException) { _bus.HandleCurrentMessageLater(); } 选项2 让它返回到NServiceBus并使用配置中的MsMqTransportConfig.MaxRetries

使用JOliver EventStore 3.0并从NServiceBus接收命令,处理并发异常的正确方法是什么?如果我有多个工作线程,这可能是常见的情况

选项1

try
{
    // store the event
    ...
}
catch (ConcurrencyException)
{
    _bus.HandleCurrentMessageLater();
}
选项2

让它返回到NServiceBus并使用配置中的MsMqTransportConfig.MaxRetries选项重试

选项3


我没有想到什么?

您可以将未提交的事件与已提交的事件进行比较,看看它们是否确实冲突(根据您的业务规则)-如果没有冲突,则可以允许事件持久化,否则重新抛出


一般来说,虽然我只是让它抛出并让NServiceBus重试。

如果命令处理程序负责保存到事件存储,它是否可以重试?或者整个命令句柄是否应该抛出并反转事务??