msmq基础知识以及如何跟踪消息的进出时间

时间:2012-09-01 12:09:07

标签: .net msmq

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

  1. http://msdn.microsoft.com/en-us/library/ms978425.aspx
  2. http://msdn.microsoft.com/en-us/library/ms978430.aspx
  3. 首先需要对msmq有一个基本的了解,因为之前我还没有真正使用它。因此,我有一些问题,而不是"新手":

    1. 听到队列的客户端收到消息后会发生什么?它会自动从队列中删除吗?
    2. 如果许多客户端正在收听队列怎么办? msmq是否会保证邮件能够到达任何一个(并且只有)一个"一个"听取客户?
    3. 公共/私人队列之间的真正区别是什么?我该什么时候去公共队列?
    4. 此外,我需要知道如何跟踪消息何时进入队列以及何时消耗?

1 个答案:

答案 0 :(得分:3)

  1. 从队列中获取消息时,会将其视为已接收并从队列中删除。 Msmq是强烈命令的 - 您将无法在其前一条消息之前收到消息。如果您希望根据对应用程序的消息收据来控制从队列中删除消息,则可以使用transactional queue。 除非它被删除,否则您将一遍又一遍地继续收到相同的消息。这被称为queue poisoning,是一个值得讨论的话题。

  2. 收到消息后,一次只能有一个客户端收到一条消息。如果您需要其他语义,可以将接收与Peek结合使用。

  3. 私有队列和公共队列在程序访问方面没有太大差异。主要区别在于它如何暴露给目录服务。仍可以使用队列路径公开专用队列。关于types of destination queues on MSDN

  4. 有一个很好的解释

    WCF有一个MSMQ绑定,它在队列上进行抽象,所以如果你更倾向于使用合同,那么这是一个替代方案(虽然我不会亲自推荐)。