如何在MSMQ队列上获取所有可用消息

Kev*_*ter 3 .net c# msmq

什么是获取当前队列中的所有消息进行处理的最佳方法?

我们有一个包含大量非常小的消息的队列,我想要做的是读取所有当前消息,然后通过线程池发送它们进行处理.

我似乎无法找到任何好的资源,它将告诉我如何创建一个简单的方法来返回IEnnumerable例如

谢谢

AJ.*_*AJ. 9

虽然我同意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);
}
Run Code Online (Sandbox Code Playgroud)


Nic*_*ick 0

这不是违背了队列的目的吗?队列应该保持消息的顺序,因此您必须循环并继续拉出第一条消息。