在NHibernate中使用Rebus和事件监听器的域事件

本文关键字:事件 监听器 Rebus NHibernate | 更新日期: 2023-09-27 18:11:53

我有一些RebusHandlers:

public class CastleRebusHandler : IHandleMessages<CastleRebusMessage>
{
    ... (ctor injections from windsor)
    public void Handle(CastleRebusMessage message)
    {
        var myPoco = _session.Get<MyPoco>(1);
        myPoco.MethodThatRaiseDomainEvent();
    }
}

方法MethodThatRaiseDomainEvent将域事件添加到内部列表中,如下所述。

我在NHibernate中设置了一些IPostUpdateEventListener,它将通过域事件的集合运行并调度每个事件。我做了一个类来控制ISession对BeforeMessage和AfterMessage事件的Rebus。

域调度事件代码在Rebus的NHibernate = AfterMessage的事件侦听器中运行(如链接中所述)。问题是如果这里发生异常怎么办?

如何将消息移动到Rebus的错误队列中以表示失败?

我们使用的是0.83版本

在NHibernate中使用Rebus和事件监听器的域事件

Rebus有一个工作单元机制,你可以使用

Configure.With(...)
    .(...)
    .Events(e => e.AddUnitOfWorkManager(...))
    .(...)

,您可以在其中提供执行该工作的当前管理器。工作管理器的工作单元是创建一个IUnitOfWork,在这里您可以调用会话伴随事务的提交和回滚。

我希望这是有意义的:)