MSMQ Transactional Message Delivery如何工作?

时间:2011-10-04 16:04:20

标签: msmq

只是想确认如何向远程事务消息队列发送消息。

假设我有两台机器,A和B.

计算机A具有用于接收消息的事务性队列。 Windows服务监视此队列并对数据执行某些操作(将其保留到SQL Server)。 机器B正在运行需要写入机器A上队列的应用程序。

几个问题:

  1. 发送邮件时,是否在机器B上创建本地副本,然后才将其传送到机器A?
    一个。如果是这样,默认情况下是这种行为,还是仅在发送“IsRecoverable”属性时发生? 湾队列是事务性的这一事实是否会对此行为产生影响?

  2. 由于我使用的是事务性队列,因此一旦事务提交,数据在哪里? 一个。它是否位于本地,等待msmq服务将消息传递到远程队列? 湾或者消息是否位于远程计算机上的队列中?

  3. 我在解释文档方面遇到了麻烦。在某些地方,我看到描述了存储和转发行为,但我无法理解这是否是事务队列的默认行为,或者我是否需要明确地做一些事情来实现这一点。

1 个答案:

答案 0 :(得分:6)

了解事务性MSMQ的主要事实是,在将消息事务传输到远程队列时实际上涉及3个不同的事务。

  1. 发件人将邮件写入本地临时队列。
  2. 发件人计算机上的队列管理器通过网络将邮件传输到收件人计算机上的队列管理器。
  3. 接收方服务处理队列消息,然后从队列中删除消息。
  4. 所以回答你的问题:

      

    发送消息时,之前是在机器B上创建的本地副本   它被送到机器A?

      

    如果是这样,默认情况下是这种行为,还是只发生在   “IsRecoverable”属性是否已发送?

    默认情况下。这就是所谓的store and forward

      

    队列是否是事务性的事实对此有任何影响   行为?

    除了失败时没有。

      

    由于我使用的是事务性队列,因此数据位于何处   交易提交?

    这取决于您的意思(见上文)

      

    它是否在本地,等待msmq服务提供   消息到远程队列?

    仅当远程队列不可用时。

      

    或者消息是否位于远程计算机上的队列中?

    如果接收方服务未能成功处理消息(处理程序中存在异常),则消息将保留在远程队列中。