簡體   English   中英

從一個隊列向其他隊列發送消息

[英]sending messages from one queue to other queues

我正在使用下面的代碼將所有消息從一個隊列中獲取到一個數組中,並同時發送到該數組中的其他隊列中,發生的是它將每個消息兩次發送到每個隊列中,我不明白為什么,任何人都可以看到任何東西明顯?

謝謝

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

明白了,這真是我所期待的愚蠢! 在我的void Main()中,我最初啟動了一個過程以確保它可以正常工作。 然后,我添加了一行以此過程啟動一個新線程,而忘記將原來的線程取出來,因此它運行了兩次。 DOH!

我還沒有時間進行測試,但是您可能需要考慮一下。

如果一個隊列將所有消息發送到其他隊列,那么當遍歷隊列列表時,原始隊列也會發送此消息。

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);
   }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM