2016-01-20 42 views
1

在提交事务时将调度发送/发布消息处理程序内部的任何消息。 (这是一个非常好的OOTB行为)UnitOfWork期间的意外行为

我已经实施了UnitOfWork每个例子。发现如果在OnCommitted(action)的动作中发生异常,则排队的消息可能会发送,这取决于deliver task是否在uow.commit()动作之前执行。

我找到了解决办法,在接收管道的末尾添加了一个流程步骤。它检查当前上下文中是否存在uow,然后提交uow。如果在提交期间发生类似数据库架构更改的异常,则会在调用OnCommitted之前发生异常,并且调度非入队消息。

使用Rebus实现UnitOfWork的正确方法是什么?

+0

谢谢让我意识到,这是我需要解决的问题 - 我很快就会提供解决方案 – mookid8000

回答

0

你可以试试Rebus.UnitOfWork包,看看你是否可以使用它?

它提供了工作的API卤面重新设计的单元,让你去:

Configure.With(...) 
    .(...) 
    .Options(o => { 
     o.EnableUnitOfWork(Create, Commit); 
    }) 

其中CreateCommit可能是这样的:

public YourOwnUnitOfWork Create(IMessageContext context) 
{ 
    return new YourOwnUnitOfWork(...); 
} 

public void Commit(IMessageContext context, YourOwnUnitOfWork uow) 
{ 
    uow.Commit(); 
}