【问题标题】:MSMQ Poison Message HandlingMSMQ 毒物消息处理
【发布时间】:2014-07-01 18:36:05
【问题描述】:

不使用 WCF 时如何处理有害消息?下面的代码创建了一个循环,我很好奇MSMQ是否提供了一个自动处理毒消息的系统。

MessageQueue mq = new MessageQueue(@".\Private$\My/Queue");

while (true)
{
    using (MessageQueueTransaction _transaction = 
            new MessageQueueTransaction())
    {
        _transaction.Begin();

        try
        {
            Message msg = mq.Receive(_transaction);

            //HandleMessage(msg);
            throw new Exception("Kaboom!");            

            _transaction.Commit();
        }
        catch (Exception ex)
        {
            _transaction.Abort();
        }

    }
}

【问题讨论】:

    标签: msmq


    【解决方案1】:

    我不相信有一种简单的方法可以使用原始 System.Messaging 类来处理有害消息。我认为最简单的解决方案是在消息上设置“TimeToBeReceived”属性,但这并不完美,因为如果接收者离线,您最终可能会丢失有效消息。我在某处读到,您可以使用 PInvoke 在 MSMQ 中处理真正的毒消息,但无法找到任何相关资源。

    我发现这篇文章有一些关于如何手动处理有害消息的想法。它可能会提供一些想法:

    http://www.cogin.com/articles/SurvivingPoisonMessages.php

    【讨论】:

    • 对,所以我应该实现自己的方案。
    猜你喜欢
    • 2010-12-26
    • 2015-06-21
    • 2013-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-12
    • 1970-01-01
    • 2011-07-27
    相关资源
    最近更新 更多