gpt4 book ai didi

.net - 如何以事务方式使用远程 MSMQ?

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

我正在编写一个 Windows 服务,它从 MSMQ 中提取消息并将它们发布到旧系统 (Baan)。如果邮寄失败或机器在邮寄过程中出现故障,我不想丢失消息。因此,我使用 MSMQ 事务。我因失败而放弃,我 promise 成功。

当针对本地队列工作时,此代码运行良好。但是在生产中,我希望将运行服务的机器(或多台机器)与队列本身分开。当我针对远程队列进行测试时,抛出 System.Messaging.MessageQueueException:“事务使用无效。”

我已经验证有问题的队列是事务性的。

这是从队列接收的代码:

// Begin a transaction.
_currentTransaction = new MessageQueueTransaction();
_currentTransaction.Begin();

Message message = queue.Receive(wait ? _queueTimeout : TimeSpan.Zero, _currentTransaction);
_logger.Info("Received a message on queue {0}: {1}.", queue.Path, message.Label);
WORK_ITEM item = (WORK_ITEM)message.Body;
return item;

回答

我已经切换到 SQL Service Broker .它支持远程事务接收,而 MSMQ 3.0 不支持。而且,作为一个额外的好处,它已经使用了我们集群和备份的 SQL Server 实例。

最佳答案

我留下了一条评论,询问您正在使用的 MSMQ 版本,因为我认为这是导致您出现问题的原因。在早期版本的 MSMQ 中没有实现事务接收。如果是这样,那么这个 blog post解释您的选择。

关于.net - 如何以事务方式使用远程 MSMQ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/133559/

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