MSMQ毒药消息处理

时间:2009-04-10 21:54:34

标签: msmq

不使用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();
        }

    }
}

1 个答案:

答案 0 :(得分:4)

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

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

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