我有一個消息隊列,我在其中添加一些電子郵件。 我想提取所有電子郵件,檢查它們的添加日期和優先級,並只發送其中的一個。 我已讀郵件這樣的:只處理來自消息隊列的一些消息
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