读取并删除MSMQ中的所有消息(通过removeccurrent方法)
本文关键字:消息 通过 removeccurrent 方法 删除 MSMQ 读取 | 更新日期: 2023-09-27 18:09:39
我尝试通过GetMessageEnumerator2
方法从MSMQ读取所有消息,但始终只获得1条消息,而使用GetAllMessages
方法,我获得正确数量的消息…
以下代码中的"bug"在哪里:
//var messages = queue.GetAllMessages(); // HERE I HAVE 5 MESSAGES
var messages = queue.GetMessageEnumerator2();
ReadQueryMessages(messages, removeAfterRead: true);
//...
ReadQueryMessages(MessageEnumerator enumerator, bool removeAfterRead = true)
{
List<Message> messages = new List<Message>();
// enumerator.Reset(); - didn't help
while (enumerator.MoveNext(new TimeSpan(0, 0, 1)))
{
messages.Add(enumerator.Current);
if (removeAfterRead)
enumerator.RemoveCurrent();
}
// process messages - HERE I HAVE ONLY 1 FIRST MESSAGE
}
p (duplicate-moderators)
我的问题不是问如何,而是问为什么在删除
我不知道为什么RemoveCurrent
不工作(或工作,但打破队列读取),但我通过添加queue
作为参数来固定:
List<ELetter> ReadQueryMessages(MessageQueue queue,
MessageEnumerator enumerator,
bool removeAfterRead = true)
{
List<Message> messages = new List<Message>();
while (enumerator.MoveNext(new TimeSpan(0, 0, 1)))
{
messages.Add(enumerator.Current);
if (removeAfterRead)
queue.ReceiveById(enumerator.Current.Id);
// enumerator.RemoveCurrent(); - this does not work properly!
}
// here I have 5 messages in the list - OK.
}