MSMQ的持续性

时间:2015-03-03 09:03:27

标签: msmq

我希望使用MSMQ创建以下拓扑:

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

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

MSMQ是否支持此拓扑

1 个答案:

答案 0 :(得分:1)

是MSMQ支持此方案。您可以使用交易MSMQ

执行此操作

交易MSMQ的基本概念:

1)必须指明交易的开始和结束,以便知道该交易中包含哪些行动。

2)如果事务成功完成,则提交它,这会导致所有操作成为永久性事务并且事务结束。

3)如果事务失败,无论出于何种原因,它将被中止并发生回滚,撤消在中止之前已经执行的任何操作。


交易MSMQ中:

源计算机跟踪传出消息,直到它从目标获得订单ACK。订单ACK表示消息已成功插入最终目标计算机上的最终目标队列。如果消息成功传递到下一跳但未收到订单ACK,则源计算机将在30秒后重新发送。然后重新发送间隔增加(最多六个小时)。如果有其他传递路由可用,消息队列将使用它们进行重新发送。

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

消息队列提供了自己的事务确认过程,以通知发送应用程序从队列中检索消息或接收应用程序无法检索它们的原因。请注意,此确认过程完全独立于提交事务。

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

以下是一些您可以查看的链接:

1)Transactional and Nontransactional Messaging

2)Message Queuing Transactions

3)Transaction Confirmation Process

4)Reliable Messaging with MSMQ and .NET

5)FAQs on MSMQ