gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 04:14:11 24 4
gpt4 key购买 nike

据我了解,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()
}

这对交易范围有什么影响?
即使trans1与Nservicebus事务之间的关系,现在trans1是否也算作嵌套事务,即使我们没有做任何事情嫁给它们也是如此? (如果不是,那么如何链接到NServiceBus的交易?

查看第二个块(trans2),如果我取消注释throw语句,那么NServiceBus事务也会回滚trans1吗?在基本方案中,假设我将以上内容转储到控制台应用程序中,然后trans1是独立的,提交,刷新且不会回滚。我想弄清楚现在我们坐在其他人的交易中(如NServiceBus)会发生什么?

上面只是示例代码,我不会直接与 session 一起工作,更像是通过uow模式。

最佳答案

如果将端点标记为事务(.MsmqTransport()。IsTransactional(true)或仅是AsA_Server),则事务将加入一个已打开的NServiceBus中。这意味着您在处理程序中进行的提交实际上不会发生,并且整个事情将一起提交或回滚-除非您明确地告诉您的事务不要加入环境事务。

无论您是直接通过 session 还是通过UoW进行工作,似乎都希望对给定的消息执行多个操作-为什么?该消息已经是自然的UoW。

关于nhibernate - NServiceBus和NHibernate-消息处理程序和事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1581917/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com