[英]Process only some messages from a message queue
我有一個消息隊列,我在其中添加一些電子郵件。 我想提取所有電子郵件,檢查添加日期和優先級,並只發送其中一個。 我讀過這樣的消息:
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;
}
Receive方法將從隊列中刪除該消息。 有沒有辦法只讀取和刪除一些消息?
LE:我想到的一個解決方案是為每條消息添加一個id,並使用ReceiveById
還有其他提示嗎?
有沒有辦法只讀取和刪除一些消息?
我從來沒有使用過MSMQ(反正不是很憤怒)但我認為你應該能夠結合Peek
和ReceiveById
方法。
所以,你會繼續Peek
在隊列,看看有什么消息可用,然后,一旦你已經決定刪除郵件利用的ReceiveById
,處理/從隊列中刪除。
除此之外,另一種選擇可能是使用2個隊列。 第一個用於所有入站消息,第二個用於添加要保留的消息。
所以回到你的例子(假設我明白你想要實現的目標)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.