NServiceBus和NHibernate-消息处理程序和事务

NServiceBus和NHibernate-消息处理程序和事务,nhibernate,transactions,nservicebus,msdtc,Nhibernate,Transactions,Nservicebus,Msdtc,据我所知,NServiceBus在事务中执行IMessageHandler的Handle方法,如果异常从该方法传播出去,则NServiceBus将确保消息被放回消息队列(在错误队列之前最多X次)等。。可以说,我们有一个原子操作 现在,如果我在我的NServiceBus消息句柄方法中,我会这样做 using(var trans = session.BeginTransaction()) { person.Age = 10; session.Update<Person>(pe

据我所知,NServiceBus在事务中执行IMessageHandler的Handle方法,如果异常从该方法传播出去,则NServiceBus将确保消息被放回消息队列(在错误队列之前最多X次)等。。可以说,我们有一个原子操作

现在,如果我在我的NServiceBus消息句柄方法中,我会这样做

using(var trans = session.BeginTransaction())
{ 

  person.Age = 10;
  session.Update<Person>(person);
  trans.Commit()
}

using(var trans2 = session.BeginTransaction())
{ 

  person.Age = 20;
  session.Update<Person>(person);
  // throw new ApplicationException("Oh no");
  trans2.Commit()
}
使用(var trans=session.BeginTransaction())
{ 
人,年龄=10岁;
更新(人);
trans.Commit()
}
使用(var trans2=session.BeginTransaction())
{ 
人,年龄=20岁;
更新(人);
//抛出新的ApplicationException(“哦,不”);
trans2.Commit()
}
这对交易范围有什么影响? 就trans1与Nservicebus事务的关系而言,trans1现在算是嵌套事务了吗?即使我们没有采取任何措施将它们结合起来?(如果不是,如何链接到NServiceBus事务

看第二个街区(trans2),如果我取消对throw语句的注释,那么NServiceBus事务是否也会回滚trans1?在基本场景中,假设我将上述内容转储到控制台应用程序中,那么trans1是独立的、提交的、刷新的,并且不会回滚。我试图澄清,现在我们坐在像NServiceBus这样的其他事务中会发生什么


以上只是示例代码,im不会直接处理会话,更像是通过uow模式。

如果您将端点标记为事务(.MsmqTransport().IsTransactional(true)或只是AsA_服务器)然后,事务将登记到打开的NServiceBus中。这意味着处理程序中的提交不会真正发生,整个过程将一起提交或回滚,除非您明确告诉您的事务不要登记到环境事务中

无论您是直接使用会话还是通过UoW工作,看起来您都希望对给定消息执行多个操作-为什么?消息已经是自然UoW