Ejemplo n.º 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);
        }