不使用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();
}
}
}
答案 0 :(得分:4)
我不相信使用原始System.Messaging类处理有害消息的简单方法。我认为最简单的解决方案是在消息上设置“TimeToBeReceived”属性,但这并不完美,因为如果接收方处于脱机状态,您最终可能会丢失有效消息。我在某处读到你可以使用PInvoke在MSMQ中进行真正的有毒消息处理,但无法在此找到任何资源。
我发现这篇文章提供了有关如何手动处理有害消息的一些想法。它可能提供一些想法: