Example #1
0
        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");
                }));
            }
        }
Example #2
0
        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);
        }
Example #3
0
        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);
        }