Example #1
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);
        }
Example #2
0
 public void AddSubqueueTo(string queueName, string subQueue)
 {
     try
     {
         subqueues.Insert(() =>
         {
             subqueues.ForColumnType <StringColumn>().Set("queue", queueName);
             subqueues.ForColumnType <StringColumn>().Set("subqueue", subQueue);
         });
     }
     catch (EsentErrorException e)
     {
         if (e.Error != JET_err.KeyDuplicate)
         {
             throw;
         }
     }
 }
Example #3
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);
        }