我有一个消息队列,我在其中添加一些电子邮件。 我想提取所有电子邮件,检查它们的添加日期和优先级,并只发送其中的一个。 我已读邮件这样的:只处理来自消息队列的一些消息
private IList<Email> GetEmailsFromQueue(MessageQueue queue)
{
queue.Formatter = new XmlMessageFormatter(new Type[] { typeof(Email) });
IList<Email> emails = new List<Email>();
Cursor cursor = queue.CreateCursor();
Message m = PeekWithoutTimeout(queue, cursor, PeekAction.Current);
if (m != null)
{
emails.Add((Email)m.Body);
while ((m = PeekWithoutTimeout(queue, cursor, PeekAction.Next)) != null)
{
emails.Add((Email)m.Body);
}
}
return emails;
}
private Message PeekWithoutTimeout(MessageQueue q, Cursor cursor, PeekAction action)
{
Message msgFromQueue = null;
try
{
msgFromQueue = q.Peek(new TimeSpan(1), cursor, action);
}
catch(MessageQueueException ex)
{
if (!ex.Message.ToLower().Contains("timeout"))
{
throw;
}
}
return msgFromQueue;
}
接收方法从队列中删除该消息。 有什么方法可以阅读和删除只有一些消息?
LE:一个解决方案,我威武想到的是一个ID添加到每封邮件,并使用ReceiveById
任何其他提示吗?
也许nservicebus是一个选择? http://www.nservicebus.com/ 这是围绕MSMQ的框架,通过队列发送消息并使用处理程序处理特定的消息。 – Thomas 2012-08-09 11:48:54
你能澄清你为什么要这么做*有什么方法可以阅读和删除只有一些消息?* – 2012-08-09 12:39:07