【发布时间】:2014-07-20 15:15:07
【问题描述】:
我们有一个 WCF 服务,用于侦听队列 (MSMQ) 上的消息。它向我们的 Web 服务器 (REST API) 发送一个请求,该请求返回一个 HTTP 状态代码。
如果状态码在 400 范围内,我们将丢弃该消息。这个想法是 400 范围错误永远不会成功(未经授权、错误请求、未找到等),因此我们不想继续重试。
对于所有其他错误(例如,500 - 内部服务器错误),我们将 WCF 配置为将消息放入“重试”队列。重试队列上的消息会在一定时间后重试。思路是服务器暂时宕机了,等一下再试。
WCF的设置方式,如果我们在服务契约中抛出一个FaultException,它会自动将消息放到重试队列中。
当消息导致 400 范围错误时,我们只是在吞噬错误(我们只是记录它)。这可以防止重试机制触发;但是,最好将消息移动到死信队列。这样我们就可以通过向用户和/或系统管理员发送电子邮件来对错误做出反应。
有没有办法立即将这些坏消息移到死信队列?
【问题讨论】:
-
我知道您想使用 WCF,但是如果您只使用 MessageQueue 类,您的要求就可以轻松完成。 MSMQ 中有很多内容是 WCF 阻止您使用的。 msdn.microsoft.com/en-us/library/…
标签: wcf message-queue msmq netmsmqbinding wcf-4