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