我已经通过了许多教程和msdn文档,如下所示,但没有一个解释当您从队列中读取消息时会发生什么......
首先需要对msmq有一个基本的了解,因为之前我还没有真正使用它。因此,我有一些问题,而不是"新手":
此外,我需要知道如何跟踪消息何时进入队列以及何时消耗?
答案 0 :(得分:3)
从队列中获取消息时,会将其视为已接收并从队列中删除。 Msmq是强烈命令的 - 您将无法在其前一条消息之前收到消息。如果您希望根据对应用程序的消息收据来控制从队列中删除消息,则可以使用transactional queue。 除非它被删除,否则您将一遍又一遍地继续收到相同的消息。这被称为queue poisoning,是一个值得讨论的话题。
收到消息后,一次只能有一个客户端收到一条消息。如果您需要其他语义,可以将接收与Peek
结合使用。
私有队列和公共队列在程序访问方面没有太大差异。主要区别在于它如何暴露给目录服务。仍可以使用队列路径公开专用队列。关于types of destination queues on MSDN。
WCF有一个MSMQ绑定,它在队列上进行抽象,所以如果你更倾向于使用合同,那么这是一个替代方案(虽然我不会亲自推荐)。