【问题标题】:Dead Letter Queue and Poison Queues死信队列和毒药队列
【发布时间】:2012-05-02 19:13:52
【问题描述】:

我了解死信队列和毒药队列之间的区别。我将在事务和持久性的背景下发言。

DLQ:客户端发送消息。 MSMQ 无法传递消息。消息仍在队列中,等待发送到目标队列。

PQ:消息已成功传递。 WCF 服务处理消息。 WCF 操作期间发生了一些错误。消息被放置在中毒队列中。

(以上如有错误请指正)

现在,如果 WCF 服务遇到错误,并且事务范围(属性)已到位,那么它如何将消息放入毒队列中,还是必须开发?如果它需要开发,那么它是如何完成的? 处理毒消息呢?有没有办法将它们放回队列中再次处理?如何确定邮件是否有毒?例如,WCF 中的操作可能会遇到错误,但可以从中恢复。

【问题讨论】:

    标签: wcf msmq


    【解决方案1】:

    只有消息队列将消息放入死信队列。应用程序只能读取和删除死信队列中的消息。

    【讨论】:

      【解决方案2】:

      您可以在MSDN - How to: Exchange Messages with WCF Endpoints and Message Queuing Applications上阅读更多关于Poison Message Handling on MSDN的更多信息

      "当服务从一个事务下的目标队列中读取消息时,服务可能由于各种原因无法处理该消息。然后将消息放回队列中再次读取。处理重复失败的消息,可以在绑定中配置一组毒消息处理属性,共有四个属性:ReceiveRetryCount、MaxRetryCycles、RetryCycleDelay、ReceiveErrorHandling。"

      【讨论】:

      • 我确实读过这个,但在 MSDN 提供的示例中,我看不到这种行为。事实上,下次服务器端服务启动时,它不会处理队列中的任何新消息或旧消息。所以在服务器端,我添加了代码来抛出异常。我看到消息仍在队列中。下次我从客户端发送消息时 - 服务器没有收到它,但它在 MSMQ 中。
      猜你喜欢
      • 2014-03-14
      • 2021-11-29
      • 1970-01-01
      • 1970-01-01
      • 2018-10-28
      • 1970-01-01
      • 2014-08-13
      • 2010-10-26
      • 2021-10-07
      相关资源
      最近更新 更多