使用MSMQ确保/验证邮件传递(C#)

时间:2009-08-30 00:42:39

标签: c# .net msmq

如何“验证”使用MSMQ向私有本地队列发送的消息是否实际已发送?我特别想到一个监听器(在我的情况下是一个C#服务)没有运行的情况,因此交付无法成功。

4 个答案:

答案 0 :(得分:3)

您只能保证它可以在不采取额外步骤的情况下进入队列。要处理“未运行的接收器”场景,您需要对接收器进行编码,以便在处理消息时将消息发送回服务器。原始发件人将负责跟踪已发送的邮件并验证客户已收到邮件。

在决定是否使用MSMQ而不是远程处理或Web服务方案时,这是您应该采取的决策之一。例如,我们有一个项目用于在发生紧急情况时通知我们所有的零售点(例如产品召回/食品安全问题。)我们需要立即知道商店的听众是否正在运行所以我们选择了远程处理,当发件人收到一个错误,表明其中一个听众不在,我们需要拿起电话并打电话。

要记住一些事情。

编辑 - 澄清

我真的给出了两个选项。

  1. 对客户端进行编码,以便在收到消息时将消息发送回发件人。
  2. 使用其他选项,例如远程处理,您可以在其中检测客户端是否正在运行并收到消息。

答案 1 :(得分:1)

它总是被发送到队列。

如果你的服务没有运行接收它,它只是坐在那里,耐心等待,直到有人收到它。

你知道它已被发送到队列,因为.Send()返回而不会崩溃。

答案 2 :(得分:1)

您可以使用administrative queues

提取此信息

答案 3 :(得分:1)

当您发送消息时,您可以指定AcknowledgeType,它允许您(通过肯定或否定确认)查找消息是否到达队列和/或是否从队列接收到消息。致谢由MSMQ作为消息发送到AdministrativeQueue,因此请确保在Message对象上分配该属性。

您可以通过相关ID检查管理队列的确认,该ID是原始邮件的ID。