【发布时间】:2009-09-09 13:45:43
【问题描述】:
您如何“验证”使用 MSMQ 发送到私有本地队列的消息是否已实际传递?我特别想到了侦听器(在我的例子中是 C# 服务)没有运行,因此无法成功交付的场景。
【问题讨论】:
您如何“验证”使用 MSMQ 发送到私有本地队列的消息是否已实际传递?我特别想到了侦听器(在我的例子中是 C# 服务)没有运行,因此无法成功交付的场景。
【问题讨论】:
您只能保证它可以进入队列而无需采取额外的步骤。要处理“未运行接收器”场景,您需要对接收器进行编码,以便在它处理消息时将消息发送回服务器。原始发件人将负责跟踪发送的消息并验证客户端是否已收到它们。
这是您在决定是否使用 MSMQ 而不是远程处理或 Web 服务方案时应该做出的决定之一。例如,我们有一个项目用于在发生紧急情况(例如产品召回/食品安全问题)时通知我们所有的零售地点。我们需要立即知道商店的监听器是否正在运行,因此我们选择了远程处理,以及何时发件人收到一个错误,表明其中一位听众没有在听,我们需要拿起电话并打电话。
只是需要记住的一点。
编辑 - 澄清
上面我真的给出了两个选项。
【讨论】:
它总是被发送到队列中。
如果您的服务没有运行以接收它,它只是坐在那里,耐心等待,直到有人接收它。
您知道它已被发送到队列,因为 .Send() 返回时不会崩溃。
【讨论】:
MessageQueue.GetAllMessages(),但他们可能会将它们从队列中弹出。不过我怀疑你可以,因为 Windows Servers MMC 管理单元可以告诉你。
您可以使用administrative queues 提取此信息
【讨论】:
当您发送消息时,您可以指定 AcknowledgeType,这将允许您确定(通过肯定或否定确认)消息是否到达队列和/或是否从队列中接收。确认通过 MSMQ 作为消息发送到管理队列,因此请确保在消息对象上分配该属性。
您可以通过相关 ID(原始消息的 ID)检查管理队列的确认。
【讨论】: