MSMQ:事务上下文中的远程访问

时间:2010-08-04 20:50:53

标签: c# transactions msmq

考虑MSMQ 3.0版

您好。

我想从远程MSMQ队列发送和读取消息。

在3.0版中,不支持使用事务进行远程读取。 在版本4.0中,事务读取不能使用receive方法,而是使用peek。

我发现使用MessageQueueTransaction进行事务性远程读取时遇到问题,答案建议使用DTC转换。 (的TransactionScope)

http://www.microsoft.com/communities/newsgroups/en-us/default.aspx?dg=microsoft.public.msmq.programming&tid=7dd22d35-1750-443d-a9b4-c771fde76e7b&cat=&lang=&cr=&sloc=&p=1

我的问题是,如果我可以使用MessageQueueTransaction对象进行事务性远程发送,或者因为它是远程发送,我需要使用TransactionScope。

由于

1 个答案:

答案 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