【问题标题】:msmq fundamentals and how to be able to track in and out times of a messagemsmq 基础知识以及如何能够跟踪消息的进出时间
【发布时间】:2012-09-01 22:50:36
【问题描述】:

我已经阅读了许多类似以下的教程和 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. 公共/私人队列之间的真正区别是什么?我应该什么时候去公共队列?

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

【问题讨论】:

    标签: .net msmq


    【解决方案1】:
    1. 当从队列中取出消息时,它被视为已接收并从队列中删除。 Msmq 是强排序的 - 您将无法在其前一条消息之前收到一条消息。如果您想根据收到的消息对您的应用程序意味着什么来控制从队列中删除消息,您可以使用transactional queue。 除非它被删除,否则您将继续一遍又一遍地收到相同的消息。这被称为queue poisoning,本身就是一个值得讨论的话题。

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

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

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

    【讨论】:

    • 这是否意味着私有队列是服务器私有的——只有在该服务器上运行的应用程序才能使用它?
    • 您可以推送到远程私有队列,前提是您知道路径。见最后一个链接。
    • 私人队列就像前目录电话号码 - 不在电话簿中并不会阻止人们给你打电话。
    • 如何跟踪消息的进出时间?
    • 有确认消息。请参阅可靠消息:msdn.microsoft.com/en-us/library/ms978430.aspx
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-14
    • 2015-05-07
    • 2013-03-17
    • 1970-01-01
    • 2022-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多