当前位置:  开发笔记 > 数据库 > 正文

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

如何解决《如何以事务方式使用远程MSMQ?》经验,为你挑选了1个好方法。

我正在编写一个Windows服务,它从MSMQ中提取消息并将它们发布到遗留系统(Baan).如果帖子失败或机器在帖子中发生故障,我不想丢失消息.因此我使用MSMQ交易.我失败了,我承诺成功.

在处理本地队列时,此代码运行良好.但在生产中,我想要将运行服务的机器(或机器)与队列本身分开.当我针对远程队列进行测试时,抛出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实例.



1> Mitch Wheat..:

我发表评论询问你正在使用的MSMQ版本,因为我认为这是你问题的原因.事务接收未在早期版本的MSMQ中实现.如果是这种情况,那么此博客文章将解释您的选择.

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有