【问题标题】:MSMQ: Remote access in transactional contextMSMQ:事务上下文中的远程访问
【发布时间】:2010-08-04 20:50:52
【问题描述】:

考虑 MSMQ 3.0 版

你好。

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

在 3.0 版中,不支持使用事务进行远程读取。 在 4.0 版本中,事务性读取可以不使用接收方法而是使用 peek 进行。

我看到了使用带有 MessageQueueTransaction 的事务性远程读取的问题,答案建议使用 DTC 事务。 (事务范围)

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。

谢谢

【问题讨论】:

    标签: c# transactions msmq


    【解决方案1】:

    根据[1],MSMQ中有2种事务:
    - 内部事务 - 由 MessageQueueTransaction 对象完成
    - 外部事务 - 由 TransactionScope 对象完成。

    当有其他参与者(例如数据库)需要在同一个事务中一起工作时,我们使用外部事务。

    否则,如果我们的事务只包含 MSMQ 队列(即使不止一个),我们应该使用 MessageQueueTransaction。

    根据 [2],msmq 发送是在“即发即弃”模式下完成的。在这种情况下,与本地或远程队列无关,如果事务不涉及其他参与者,则应使用 MessageQueueTransaction。

    在远程队列的情况下,如果我们需要到达目的地的保证,我们必须使用确认机制。

    [1]http://msdn.microsoft.com/en-us/library/ms978430.aspx
    [2]http://beaucrawford.net/post/MSMQ-ndash3b-Sending-Messages-to-Remote-Queues.aspx

    【讨论】:

      猜你喜欢
      • 2012-12-03
      • 2013-06-22
      • 1970-01-01
      • 2010-09-13
      • 2013-02-28
      • 2012-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多