我有一个简单的流程,从一个队列读取消息,处理消息并输出到另一个队列。我尝试将这个转移包装在TransactionScope中,以使来自输入队列的读取和写入到输出队列发生在同一个事务中。
然而,似乎正在使用MSDTC来进行此事务,结果比使用标准的MessageQueueTransaction慢得多。这样应该发生吗?我认为只有当作用域涉及例如消息队列读取和数据库写入时,TransactionScope才会升级到外部事务,而不是仅涉及多个消息队列。
谢谢。
编辑:目前这一切都在我的笔记本电脑上进行,所以我确定没有其他机器参与。
我还想补充说,我正在通过检查Windows的“组件服务”捷径(即本地DTC / 事务列表)来确认是否发生了升级事务。我可以看到事务进入并离开此屏幕,我认为这意味着事务已经被升级。我在这方面的假设错了吗?
编辑2:当我只写入单个队列时,我也会得到相同的行为!即:
然而,似乎正在使用MSDTC来进行此事务,结果比使用标准的MessageQueueTransaction慢得多。这样应该发生吗?我认为只有当作用域涉及例如消息队列读取和数据库写入时,TransactionScope才会升级到外部事务,而不是仅涉及多个消息队列。
谢谢。
编辑:目前这一切都在我的笔记本电脑上进行,所以我确定没有其他机器参与。
我还想补充说,我正在通过检查Windows的“组件服务”捷径(即本地DTC / 事务列表)来确认是否发生了升级事务。我可以看到事务进入并离开此屏幕,我认为这意味着事务已经被升级。我在这方面的假设错了吗?
编辑2:当我只写入单个队列时,我也会得到相同的行为!即:
using (var ts = new TransactionScope())
{
using (var q = new MessageQueue("..."))
{
/* write data */
}
ts.Complete();
}
尽管队列在本地机器上,我可以看到DTC与上述内容一起使用。