4

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

    }
}
4

1 回答 1

4

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

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

http://www.cogin.com/articles/Sur​​vivingPoisonMessages.php

于 2009-04-10T22:19:40.037 回答