gpt4 book ai didi

.net - 在队列之间发送时 TransactionScope 提升到 MSDTC?

转载 作者:行者123 更新时间:2023-12-03 00:25:19 25 4
gpt4 key购买 nike

我有一个简单的过程,它从一个队列读取,处理消息,然后输出到另一个队列。我试图将此传输包装在 TransactionScope 中,以便从输入队列读取和写入输出队列发生在同一事务中。

但是,似乎使用 MSDTC 来执行此事务,因此它比使用标准 MessageQueueTransaction 慢得多。这应该发生吗?我的印象是,如果涉及范围(例如,消息队列读取和数据库写入),TransactionScope 只会提升为外部事务,但如果仅涉及多个消息队列,则不会。

谢谢。

编辑:目前这一切都在我的笔记本电脑上,所以我确信不涉及其他机器。

我还想补充一点,我通过检查 Windows 的“组件服务”管理单元(即本地 DTC/事务列表)来确认正在发生升级的事务。我可以看到进入和离开此屏幕的交易,我认为这意味着交易已升级。我的假设是错误的吗?

编辑2:当我只写入单个队列时,我得到了相同的行为!即

using (var ts = new TransactionScope())
{
using (var q = new MessageQueue("..."))
{
/* write data */
}

ts.Complete();
}

尽管队列位于本地计算机上,但我可以看到上面使用的 DTC。

最佳答案

看来 TransactionScope 仅处理与消息队列相关的外部事务。如果您希望它仅在内部使用,则必须使用 MessageQueueTransaction。这与 SQL 事务不同,其中事务仅在需要时升级,这让我感到困惑。

关于.net - 在队列之间发送时 TransactionScope 提升到 MSDTC?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12427898/

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