异常后重新发送到MSMQ

时间:2008-11-10 21:53:51

标签: c# .net msmq

我正在尝试在抛出异常时将消息放回MSMQ。以下代码似乎可以正常工作,但Message不会被放回队列中?

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 个答案:

答案 0 :(得分:5)

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

第二部分是要小心如何创建队列以及如何将消息提交到第二个队列。特别是,MSMQ在发送消息时有时似乎“无声地失败”(尽管实际上错误消息记录在死信队列的其他地方),特别是如果发送的事务选项与目标的事务性质不匹配队列中。

答案 1 :(得分:2)

您是否打算将该讯息发回给发件人?将它发回给自己是非常危险的,你只会一次又一次地炸弹。

答案 2 :(得分:0)

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

答案 3 :(得分:-1)

我设法通过创建新队列并将代码指向新队列来获取上面的代码。

然后我比较了2个队列并发现新队列是多播的(第一个队列不是),新队列有一个标签,第一个队列没有。否则队列看起来是一样的。