【问题标题】:sending messages from one queue to other queues将消息从一个队列发送到其他队列
【发布时间】:2013-11-15 05:26:53
【问题描述】:

我正在使用下面的代码将所有消息从队列中获取到数组中并发送到数组中的其他队列,发生的情况是它向每个队列发送每条消息两次,我不明白为什么,可以有人看到什么明显的东西吗?

谢谢

public void SendToQs()
{
    Code.Class1 c = new Code.Class1();
    oInQueue = new MessageQueue(sInQueue);
    Message[] msgs = oInQueue.GetAllMessages();

    var queueArray = sOutQueues.Select(s => new MessageQueue(s)).ToArray();
    foreach (Message msg in msgs)
    {
        foreach (MessageQueue s in queueArray)
        {
            c.WriteMessage(s, msg, msg.Label);
        }

    }
    oInQueue.Purge();
}

写消息:

public void WriteMessage(MessageQueue outputQueue, Message msg, string label)
{
    if (!outputQueue.Transactional)
    {
        try
        {
            outputQueue.Send(msg, label);
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
    else
    {
        MessageQueueTransaction trans = new MessageQueueTransaction();
        try
        {
            trans.Begin();
            outputQueue.Send(msg, label, trans);
            trans.Commit();
        }
        catch (Exception ex)
        {
            Console.WriteLine("message Q exception" + ex.Message);
            trans.Abort();
        }
    }
}

【问题讨论】:

  • 所以 WriteMessage 被调用 X 次,但发送了 2X 条消息?
  • 没错,一直在坚持一些 console.writelines 并且它似乎发生在电话会议上。发布这个以防我只是盯着它太久了,有一些我看不到的明显错误......
  • 这个问题对您有帮助吗? stackoverflow.com/questions/940351/…

标签: c# msmq


【解决方案1】:

知道了,正如我所期待的那样,这很愚蠢! 在我的 void Main() 中,我最初启动了一个进程只是为了确保它有效。 然后我添加了一行来用这个进程启动一个新线程,忘记取出原来的线程,所以它运行了两次。 哦!

【讨论】:

    【解决方案2】:

    我没有时间对此进行测试,但您可能需要考虑一下。

    如果一个队列将其所有消息发送到其他队列,则在遍历队列列表时 - 原始队列也会发送此消息。

    foreach (Message msg in msgs)
    {
       foreach (MessageQueue s in queueArray)
       {
          if (s.Id == oInQueue.Id) continue; // Skip if this is the originator
          c.WriteMessage(s, msg, msg.Label);
       }
    }
    

    【讨论】:

      猜你喜欢
      • 2013-11-12
      • 2022-07-28
      • 1970-01-01
      • 1970-01-01
      • 2014-04-13
      • 1970-01-01
      • 2012-02-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多