メールを追加するメッセージキューがあります。すべてのメールを抽出し、追加された日付と優先度を調べて、そのうちの1つだけを送信したいと思います。私はこのようなメッセージを読みました:
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:私が考えている解決策の1つは、各メッセージにIDを追加し、ReceiveByIdを使用することです。
他のヒントはありますか?