考虑MSMQ 3.0版
您好。
我想从远程MSMQ队列发送和读取消息。
在3.0版中,不支持使用事务进行远程读取。 在版本4.0中,事务读取不能使用receive方法,而是使用peek。
我发现使用MessageQueueTransaction进行事务性远程读取时遇到问题,答案建议使用DTC转换。 (的TransactionScope)
我的问题是,如果我可以使用MessageQueueTransaction对象进行事务性远程发送,或者因为它是远程发送,我需要使用TransactionScope。
由于
答案 0 :(得分:1)
根据[1],MSMQ中有两种交易:
- 内部事务 - 由MessageQueueTransaction对象完成
- 外部事务 - 由TransactionScope对象完成。
当有其他参与者然后MSMQ(例如数据库)需要在同一个交易中一起工作时,我们使用外部交易。
否则,如果我们的事务只包含MSMQ队列(即使不止一个),我们应该使用MessageQueueTransaction。
根据[2],msmq发送是在“fire and forget”模式下完成的。在这种情况下,独立于本地或远程队列,如果事务不涉及其他参与者,则应使用MessageQueueTransaction。
如果是远程队列,如果我们需要到达目的地的保修,我们必须使用确认机制。
[1] http://msdn.microsoft.com/en-us/library/ms978430.aspx
[2] http://beaucrawford.net/post/MSMQ-ndash3b-Sending-Messages-to-Remote-Queues.aspx