簡體   English   中英

如何在MSMQ隊列上獲取所有可用消息

[英]how can i get all the available messages on a MSMQ Queue

什么是獲取當前隊列中的所有消息進行處理的最佳方法?

我們有一個包含大量非常小的消息的隊列,我想要做的是讀取所有當前消息,然后通過線程池發送它們進行處理。

我似乎無法找到任何好的資源,它將告訴我如何創建一個簡單的方法來返回IEnnumerable例如

謝謝

雖然我同意Nick的看法,隊列的目的更多是用於FIFO樣式處理,而ArsenMkrt的解決方案也可以使用,另一個選擇是使用MessageEnumerator並將消息堆積到IEnumerable中。

var msgEnumerator = queue.GetMessageEnumerator2();
var messages = new List<System.Messaging.Message>();
while (msgEnumerator.MoveNext(new TimeSpan(0, 0, 1)))
{
    var msg = queue.ReceiveById(msgEnumerator.Current.Id, new TimeSpan(0, 0, 1));
    messages.Add(msg);
}

對於簡單的東西......

public void DoIt()
    {

        bool continueToSeekForMessages = true;

        while (continueToSeekForMessages)
        {
            try
            {
                var messageQueue = new System.Messaging.MessageQueue(@"FormatName:Direct=OS:MyComputerNameHere\Private$\MyPrivateQueueNameHere");
                var message = messageQueue.Receive(new TimeSpan(0, 0, 3));
                message.Formatter = new System.Messaging.XmlMessageFormatter(new String[] { "System.String,mscorlib" });
                var messageBody = message.Body;

            }
            catch (Exception ex)
            {
                continueToSeekForMessages = false;
            }
        }
    }

此外,可以使用peek而不是將消息從隊列中取出。

此外,可以使用GetMessageEnumerator2

這不是打敗了隊列的目的嗎? 隊列應該保持消息的順序,所以你必須循環並繼續拉出第一個消息。

最新版本的MSMQ還具有以下功能:

您可以在單個對象中獲取所有消息,如下所示:(編寫您自己的“ReceiveCompleted事件”處理程序)

private static void MyReceiveCompleted(Object source,
        ReceiveCompletedEventArgs asyncResult)
    {
        MessageQueue mq = (MessageQueue)source;
        try
        {
            Message[] mm = mq.GetAllMessages();
            foreach (Message m in mm)
            {
            // do whatever you want
            }
        }
        catch (MessageQueueException me)
        {
            Console.WriteLine(me.Message);
        }
        finally
        {

        }


        return;
    }

暫無
暫無

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

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