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