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); }
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; } } }
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); }