public IEnumerable <HistoryMessage> GetAllProcessedMessages(int?batchSize = null) { int count = 0; var enumerator = _messageHistory.GetEnumerator(); while (enumerator.MoveNext() && count++ != batchSize) { var bookmark = enumerator.Current; bookmark.QueueName = _queueName; yield return(_messageHistory.ReadMessageWithId <HistoryMessage>(bookmark, _queueName, x => { x.MovedToHistoryAt = _messageHistory.ForColumnType <DateTimeColumn>().Get("moved_to_history_at"); })); } }
public PersistentMessage Dequeue(string subqueue) { var enumerator = _messages.GetEnumerator(new StringValueIndex("by_sub_queue", subqueue)); while (enumerator.MoveNext()) { var id = _messages.GetMessageId(); var status = (MessageStatus)_messages.ForColumnType <IntColumn>().Get("status"); _logger.Debug("Scanning incoming message {2} on '{0}/{1}' with status {3}", _queueName, subqueue, id, status); if (status != MessageStatus.ReadyToDeliver) { continue; } try { _messages.Update(() => _messages.ForColumnType <IntColumn>().Set("status", (int)MessageStatus.Processing)); } catch (EsentErrorException e) { _logger.Debug("Write conflict on '{0}/{1}' for {2}, skipping message", _queueName, subqueue, id); if (e.Error == JET_err.WriteConflict) { continue; } throw; } var bookmark = enumerator.Current; bookmark.QueueName = _queueName; _changeNumberOfMessages(-1); _logger.Debug("Dequeuing message {2} from '{0}/{1}'", _queueName, subqueue, id); return(_messages.ReadMessageWithId <PersistentMessage>(bookmark, _queueName, x => { x.SubQueue = subqueue; })); } return(null); }
internal static TMessage ReadMessageWithId <TMessage>(this EsentTable table, MessageBookmark bookmark, string queueName, Action <TMessage> action) where TMessage : PersistentMessage, new() { var message = table.ReadMessageWithId <TMessage>(bookmark, queueName); action(message); return(message); }