如何从队列中删除邮件?
我有消息陷入队列,我正在寻找一种以编程方式删除它们的方法。
有没有办法从队列中删除超过x天的消息? 我可以连接和删除这样的队列,但不知道如何删除单个邮件。
MessageQueue queue = new MessageQueue(@".private$SomeTestName"); //queue.Purge(); //deletes the entire queue try { // Peek and format the message. Message m = myQueue.Peek(); // Display message information. Console.WriteLine("Sent time {0}", m.SentTime); Console.WriteLine("Arrived time {0}", m.ArrivedTime); }
没有API可用于执行此操作。 但你可以使用
使用枚举的好处是,如果队列有很多消息,读取所有消息可能会导致OutOfMemoryException
。 使用枚举器,您一次只能读取1条消息,并且可以重用为其分配的内存。
提高性能的另一个技巧是指定要读取的属性,这样如果消息体很大而您对内容不感兴趣,则可以禁用它。
var enumerator = _queue.GetMessageEnumerator2(); // get enumerator var staleDate = DateTime.UtcNow.AddDays(-3); // take 3 days from UTC now var filter = new MessagePropertyFilter(); // configure props to read filter.ClearAll(); // don't read any property filter.ArrivedTime = true; // enable arrived time _queue.MessageReadPropertyFilter = filter; // apply filter while (enumerator.MoveNext()) if(enumerator.Current.ArrivedTime.Date >= staleDate) enumerator.RemoveCurrent();
我想你可以这样做:
MessageQueue queue = new MessageQueue(@".private$SomeTestName"); var messages = queue.GetAllMessages(); var messagesToDelete = messages.Where(m => m.ArrivedTime < DateTime.Now.AddDays(-1)).ToList(); messagesToDelete.ForEach(m=>queue.ReceiveById(m.Id));
显然,您必须修改日期内容以符合您的方案。
您还可以使用ReceiveById方法从队列中删除消息。
请查看以下链接: https : //msdn.microsoft.com/en-us/library/system.messaging.messagequeue.receivebyid%28v=vs.110%29.aspx
调用GetAllMessages并添加一个检查以查找您的消息并对该消息执行删除操作。 示例代码,
上述就是C#学习教程:如何从队列中删除邮件?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
Message[] messages = msgQueue.GetAllMessages(); foreach (Message msg in messages){ doSomething(); }
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/955511.html