3

当抛出异常时,我试图将消息放回 MSMQ。以下代码似乎可以工作,但消息没有放回队列中?

Message msg = null;
try
{
    MessageQueue MQueue = new MessageQueue(txtMsgQPath.Text);
    msg = MQueue.ReceiveById(txtQItemToRead.Text);
    lblMsgRead.Text = msg.Body.ToString(); // This line throws exception
}
catch (Exception ex)
{
    lblMsgRead.Text = ex.Message;
    if (msg != null)
    {
        MessageQueue MQ = new MessageQueue(txtMsgQPath.Text);
        MQ.Send(msg);
    }
}
4

4 回答 4

5

几点:最好的方法是使用跨越两个队列的事务;这样你就会知道你不会丢失消息。

第二部分是要注意如何创建队列以及如何将消息提交到第二个队列。特别是,MSMQ 在发送消息时有时会出现“静默失败”(尽管实际上错误消息记录在死信队列的其他位置),特别是如果发送的事务选项与目标的事务性质不匹配队列。

于 2008-11-11T19:41:15.780 回答
2

您真的打算将该消息发回给发起者吗?把它寄回给自己是非常危险的,你只会一遍又一遍地再次轰炸。

于 2008-11-10T22:09:26.903 回答
0

我相信您正在寻找“偷看”消息。使用:MessageQueue.Peek,如果成功,则使用该消息。

于 2008-11-10T22:04:30.003 回答
-1

我设法通过创建一个新队列并将代码指向新队列来使上面的代码工作。

然后我比较了 2 个队列并注意到新队列是多播的(第一个队列不是),并且新队列有一个标签,而第一个没有。否则,队列似乎是相同的。

于 2008-11-10T23:01:17.377 回答