Exemple #1
0
        internal static MessageId GetMessageId(this EsentTable table)
        {
            var id = new MessageId
            {
                MessageIdentifier = table.ForColumnType <GuidColumn>().Get("msg_id"),
                SourceInstanceId  = table.ForColumnType <GuidColumn>().Get("instance_id")
            };

            return(id);
        }
Exemple #2
0
        private string[] GetSubqueues(string queueName)
        {
            var list       = new List <string>();
            var enumerator = subqueues.GetEnumerator(new StringValueIndex("by_queue", queueName));

            while (enumerator.MoveNext())
            {
                list.Add(subqueues.ForColumnType <StringColumn>().Get("subqueue"));
            }

            return(list.ToArray());
        }
Exemple #3
0
        internal static TMessage ReadMessage <TMessage>(this EsentTable table, MessageBookmark bookmark, string queueName, Action <TMessage> action) where TMessage : PersistentMessage, new()
        {
            var message = new TMessage
            {
                Bookmark = bookmark,
                Status   = (MessageStatus)table.ForColumnType <IntColumn>().Get("status"),
                Headers  = HttpUtility.ParseQueryString(table.ForColumnType <StringColumn>().Get("headers")),
                Queue    = queueName,
                SentAt   = table.ForColumnType <DateTimeColumn>().Get("timestamp"),
                Data     = table.ForColumnType <BytesColumn>().Get("data"),
            };

            action(message);
            return(message);
        }
Exemple #4
0
        public void MoveToHistory(MessageBookmark bookmark)
        {
            _messages.MoveTo(bookmark);
            var id = _messages.GetMessageId();

            _messageHistory.Insert(() =>
            {
                _messages.ColumnNames.Each(x =>
                {
                    var columnBytes = _messages.ForColumnType <BytesColumn>().Get(x);
                    _messageHistory.ForColumnType <BytesColumn>().Set(x, columnBytes);
                });
                _messageHistory.ForColumnType <DateTimeColumn>().Set("moved_to_history_at", DateTime.Now);
            });
            _messages.Delete();
            _logger.Debug("Moving message {0} on queue {1} to history",
                          id, _queueName);
        }
Exemple #5
0
        private void AddToNumberOfMessagesIn(string queueName, int count)
        {
            var enumerator = queues.GetEnumerator(new StringValueIndex("pk", queueName));

            if (!enumerator.MoveNext())
            {
                return;
            }

            queues.ForColumnType <IntColumn>().InterlockedIncrement("number_of_messages", count);
        }
Exemple #6
0
        public MessageBookmark Enqueue(Message message)
        {
            var bm = _messages.Insert(() =>
            {
                var messageStatus     = MessageStatus.InTransit;
                var persistentMessage = message as PersistentMessage;
                if (persistentMessage != null)
                {
                    messageStatus = persistentMessage.Status;
                }

                _messages.ForColumnType <DateTimeColumn>().Set("timestamp", message.SentAt);
                _messages.ForColumnType <BytesColumn>().Set("data", message.Data);
                _messages.ForColumnType <GuidColumn>().Set("instance_id", message.Id.SourceInstanceId);
                _messages.ForColumnType <GuidColumn>().Set("msg_id", message.Id.MessageIdentifier);
                _messages.ForColumnType <StringColumn>().Set("subqueue", message.SubQueue);
                _messages.ForColumnType <StringColumn>().Set("headers", message.Headers.ToQueryString());
                _messages.ForColumnType <IntColumn>().Set("status", (int)messageStatus);
            });

            bm.QueueName = _queueName;

            if (string.IsNullOrEmpty(message.SubQueue) == false &&
                Subqueues.Contains(message.SubQueue) == false)
            {
                _actions.AddSubqueueTo(_queueName, message.SubQueue);
                _subqueues = _subqueues.Union(new[] { message.SubQueue }).ToArray();
            }

            _logger.Debug("Enqueuing msg to '{0}' with subqueue: '{1}'. Id: {2}", _queueName, message.SubQueue, message.Id);
            _changeNumberOfMessages(1);
            return(bm);
        }