2015-03-03 93 views
1

我希望创建使用MSMQ以下拓扑:持续性在MSMQ

  • 在服务器A服务将消息写入本地队列
  • 在服务器A的本地队列是一个介体到另一个队列在服务器B

这意味着当服务器A中的服务将消息写入服务器A中的队列时,此队列会立即将此消息传输到服务器B中的队列中。如果由于某种原因,服务器B的连接将关闭服务器A中的队列聚合消息,直到连接恢复编辑。

MSMQ是否支持此拓扑

回答

1

是MSMQ支持此方案。您可以使用Transactional MSMQ来完成此操作。

事务MSMQ的基本概念:

1)交易的开始和结束,必须指出的,使得它是已知的操作包含该事务处理内。

2)如果事务成功完成,它将被提交,这将导致所有操作成为永久性并且事务结束。 3)如果事务失败,无论出于何种原因,它将被中止并发生回滚,撤销在中止之前已经执行的任何操作。


事务MSMQ:

源计算机跟踪传出消息,直到它得到来自目的地的顺序ACK。顺序ACK表示消息已成功插入最终目标计算机上的最终目标队列中。如果消息被成功传送到下一跳但未收到ACK命令,则源计算机在30秒后重新发送。重新发送间隔然后增加(长达六小时)。如果其他交付路线可用,消息队列将使用它们进行重发。

当您将消息发送到远程队列时,会在您自己的计算机上创建一个临时传出队列。这用于远程队列不可用的情况。如果您转到计算机管理控制台(compmgmt.msc),并展开服务和应用程序/消息队列/传出队列,您将看到这些队列。控制台的右侧应显示详细信息,包括下一跳的状态(连接与否)和IP地址(es)。

消息队列提供其自己的事务确认过程,以通知发送应用程序,消息是从队列中检索的,或者为什么接收应用程序未能检索到它们。请注意,此确认过程完全独立于提交交易。

当消息放入目标队列时,目标队列管理器通过发送包含其序列号的订单确认消息回到源计算机来确认其到达。该数字向源队列管理器指示消息流中直到已确认消息的所有消息都被接受。

这里有一些链接,你可以看一下:

1)Transactional and Nontransactional Messaging

2)Message Queuing Transactions

3)Transaction Confirmation Process

4)Reliable Messaging with MSMQ and .NET

5)FAQs on MSMQ