gpt4 book ai didi

.net - 如何处理 WCF 的 MSMQ 绑定(bind)中的消息失败

转载 作者:行者123 更新时间:2023-12-03 13:55:49 27 4
gpt4 key购买 nike

我创建了一个 WCF 服务并正在使用 netMsmqBinding 绑定(bind)。
这是一个简单的服务,它将 Dto 传递给我的服务方法并且不期望响应。消息被放置在一个 MSMQ 中,并且一旦被拾取就插入到一个数据库中。
确保没有数据丢失的最佳方法是什么。
我尝试了以下两种方法:

  • 抛出异常
    这会将消息置于死信队列中以供手动阅读。当我的服务开始时,我可以处理这个
  • 在绑定(bind)上设置 receiveRetryCount="3"
    经过 3 次尝试后 - 瞬间发生,这似乎将消息留在队列中,但我的服务出错了。重新启动我的服务会重复此过程。

  • 理想情况下,我想做以下事情:
    尝试处理消息
  • 如果失败,请等待该消息 5 分钟,然后重试。
  • 如果该过程失败 3 次,则将消息移动到死信队列。
  • 重新启动服务会将死信队列中的所有消息推回队列中,以便对其进行处理。

  • 我能做到这一点吗?如果有怎么办?
    你能给我指出任何关于如何最好地利用 WCF 和 MSMQ 来处理我给定场景的好文章吗?
    任何帮助将非常感激。谢谢!
    一些附加信息
    我在 Windows XP 和 Windows Server 2003 上使用 MSMQ 3.0。
    不幸的是,我不能使用针对 MSMQ 4.0 和 Vista/2008 的内置有害消息支持。

    最佳答案

    我认为使用 MSMQ(仅在 Vista 上可用)您可以这样做:

    <bindings>
    <netMsmqBinding>
    <binding name="PosionMessageHandling"
    receiveRetryCount="3"
    retryCycleDelay="00:05:00"
    maxRetryCycles="3"
    receiveErrorHandling="Move" />
    </netMsmqBinding>
    </bindings>

    WCF 将在第一次调用失败后立即重试 ReceiveRetryCount 次。批处理失败后,消息被移动
    到重试队列。延迟 RetryCycleDelay 分钟后,消息从重试队列移动到端点队列,并重试批处理。这将重复
    MaxRetryCycle 时间。如果所有这些都失败,则根据可以移动的 receiveErrorHandling 处理消息
    (对中毒队列)、拒绝、丢弃或故障

    顺便说一句,关于 WCF 和 MSMQ 的好文章是来自 Juval Lowy 的 Progammig WCF 书的第 9 章

    关于.net - 如何处理 WCF 的 MSMQ 绑定(bind)中的消息失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/82099/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com