如何防止NServiceBus中抑制作用域事务的意外标记



我试图发送一条简单的消息,但它似乎自动被标记为没有事务范围(行为)。端点运行SQL传输(3.0.1)和NSB 6.1.2,SQL传输以默认事务模式(TransactionScope)运行。

据我所知,目前还没有对此采取具体行动,我唯一能想象的是,连接字符串与Dapper共享,Dapper也对数据库执行了几个等待中的查询。

var data = await Provider.GetSomeRandomData(message.DataId);
bool synced = false;
await context.Reply(new RandomMessage());

如果使用TransportTransactionMode.SendsAtomicWithReceive配置端点,则不会记录任何内容,当启用TransportTransactionMode.TransactionScope时,会发生日志记录(当然,可能也会丢失实际效果)。

理想情况下,提供程序将(以某种方式)使用NServiceBus正在使用的同一事务,尽管对于查询数据,它需要以某种方式脱离此事务上下文,在不中断NServiceBus事务的情况下查询数据库(如果这真的是问题所在),这样写操作仍将进行事务处理。

你能尝试添加.ConfigureAwait(false)

await context.Reply(new RandomMessage()) .ConfigureAwait(false);

有关的更多详细信息,请参阅本文

这能解决问题吗?

最新更新