2

我已经阅读了许多教程和 msdn 文档,如下所示,但没有一个解释了当您从队列中读取消息时会发生什么......

  1. http://msdn.microsoft.com/en-us/library/ms978425.aspx
  2. http://msdn.microsoft.com/en-us/library/ms978430.aspx

首先需要对 msmq 有一个基本的了解,因为我以前没有真正使用过它。因此,我有一些相当“新手”的问题:

  1. 收听队列的客户端收到消息后会发生什么情况?它会自动从队列中删除吗?
  2. 如果一个队列被许多客户端监听怎么办?msmq 会保证消息将到达任何(且仅)“一个”侦听客户端吗?
  3. 公共/私人队列之间的真正区别是什么?我应该什么时候去公共队列?

我还需要知道如何跟踪消息何时进入队列以及何时被消耗?

4

1 回答 1

3
  1. 当从队列中取出一条消息时,它被视为已接收并从队列中删除。Msmq 是强排序的 - 您将无法在其前一条消息之前收到一条消息。如果您希望根据消息接收对您的应用程序的意义来控制从队列中删除消息,则可以使用事务队列。除非它被删除,否则您将继续一遍又一遍地收到相同的消息。这被称为队列中毒,本身就是一个值得讨论的话题。

  2. 收到一条消息时会删除,因此一次只有一个客户端可能会收到一条消息。Peek如果您想要其他语义,您可以将接收与。

  3. 私有队列和公共队列在编程访问方面并没有太大区别。主要区别在于它如何暴露给目录服务。私有队列仍然可以通过队列路径公开。关于 MSDN 上的目标队列类型有一个很好的解释。

WCF 有一个对队列进行抽象的 MSMQ 绑定,因此如果您更倾向于使用合同(尽管我个人不推荐它),这是一个替代方案。

于 2012-09-01T13:37:15.713 回答