2011-10-04 52 views
8

只想获得有关如何将消息发送到远程事务消息队列的确认。MSMQ交易消息传递如何工作?

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

机A有一个用于接收消息的事务队列。一个Windows服务监视这个队列并对数据执行一些操作(将它保存到SQL Server中)。 机B正在运行需要写入队列在计算机A

的几个问题的应用程序:

  1. 发送该消息时,是机器B上创建一个本地副本,它得到前交付给机器A?
    a。如果是这样,默认情况下是这种行为,还是仅在发送“IsRecoverable”属性时才会发生? b。队列是否事务是否对此行为有影响?

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

我无法解释文档。在某些地方,我看到商店和转发行为被描述,但我无法理解这是否是事务性队列的默认行为,或者我需要明确地做些事情才能实现。

回答

6

关于事务性MSMQ的主要理解是,实际上有3个不同的事务涉及消息事务传输到远程队列。

  1. 发送方将消息写入本地临时队列。
  2. 发件人计算机上的队列管理器通过线路将消息传输到收件人计算机上的队列管理器。
  3. 接收方服务处理队列消息,然后从队列中删除消息。

那么,现在回答你的问题:

发送该消息时,是机器B上创建一个本地副本, 以前被传递到机器A?

如果是这样,这种行为在默认情况下,或当发送 “IsRecoverable”属性它才会发生?

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

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

除了发生故障时没有。

因为我使用的是事务性队列,所以事务提交后数据一旦被提交,数据在哪里?

这取决于你的意思是该交易(见上文)

难道是坐在当地,等待MSMQ服务交付 消息发送到远程队列?

只有当远程队列不可用时。

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

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

+0

谢谢休,这非常有帮助! – Kartik