【发布时间】:2010-09-10 01:45:13
【问题描述】:
我已经创建了一个 WCF 服务并且正在使用 netMsmqBinding 绑定。
这是一个简单的服务,它将 Dto 传递给我的服务方法并且不期望响应。消息被放置在一个 MSMQ 中,一旦被拾取就插入到一个数据库中。
确保没有数据丢失的最佳方法是什么。
我尝试了以下两种方法:
-
抛出异常
这会将消息放入死信队列以供手动阅读。我可以在我的服务开始时处理这个
-
在绑定上设置receiveRetryCount="3"
在 3 次尝试之后 - 瞬间发生,这似乎将消息留在队列中,但我的服务出错了。重新启动我的服务会重复此过程。
理想情况下,我想做以下事情:
尝试处理消息
- 如果失败,请等待该消息 5 分钟,然后重试。
- 如果该进程失败 3 次,则将消息移至死信队列。
- 重新启动服务会将死信队列中的所有消息推回队列,以便对其进行处理。
我能做到这一点吗?如果有怎么办? 您能否向我指出任何关于如何在我给定的场景中最好地利用 WCF 和 MSMQ 的好文章。
任何帮助将不胜感激。谢谢!
一些附加信息
我在 Windows XP 和 Windows Server 2003 上使用 MSMQ 3.0。 不幸的是,我无法使用针对 MSMQ 4.0 和 Vista/2008 的内置有害消息支持。
【问题讨论】: