我想從一個隊列中獲取消息並將其發送到數據庫。我只想在特定格式的情況下這樣做。如何從消息隊列中刪除消息(僅在格式良好的情況下)?
如果我使用直接Receive
方法和在訪問消息的Body
發生一些異常,我失去消息由於MessageQueue
的Receive
方法從隊列中移除該消息。
爲了避免丟失信息,現在我第一次使用Peek
這條信息,如果它的格式良好,我使用Receive
方法將它從隊列中移除並將它發送到數據庫。我已經寫
代碼是這樣的:
Message msg = _queue.Peek(new TimeSpan(0, 0, LoggingService.Configuration.ReceiveTimeout));
// LogMessage is my own class which is adding some more stuff to original message from MessageQueue
LogMessage message = null;
if (msg != null)
{
if (!(msg.Formatter is BinaryMessageFormatter))
msg.Formatter = new BinaryMessageFormatter();
message = LogMessage.GetLogMessageFromFormattedString((string) msg.Body);
// Use Receive method to remove the message from queue. This line will we executed only if the above line does not
// throw any exception i.e. if msg.Body does not have any problem
Message wellFormattedMsg =
_queue.ReceiveById(msg.Id);
SendMessageToDatabase(message);
}
這是邏輯有權首先使用窺視,然後接收?或者有沒有其他更好的方法來實現同樣的目標?請注意,我不想一次收到所有消息。 MessageQueue是非事務性的。
相關[我怎樣才能把一個隊列中的消息?(http://stackoverflow.com/q/23227194/706456) – oleksii 2014-05-23 11:27:49