public QueueMessageVisualization get_message_Port_QueueName_SourceInstanceId_MessageId(
            MessageInputModel input)
        {
            var messageId = new MessageId
            {
                MessageIdentifier = input.MessageId,
                SourceInstanceId = input.SourceInstanceId
            };

            var message = retrieveMessage(messageId, input.Port, input.QueueName);

            if (message == null)
            {
                return new QueueMessageVisualization {NotFound = true};
            }

            var envelope = message.ToEnvelope();
            envelope.UseSerializer(_serializer);

            // TODO -- show errors if in error queue

            var model = new QueueMessageVisualization
            {
                MessageId = messageId,
                QueueName = message.Queue,
                SubQueueName = message.SubQueue,
                Status = message.Status,
                SentAt = message.SentAt,
                Headers = message.Headers.ToDictionary(),
                Port = input.Port

            };

            try
            {
                // TODO -- gotta watch how big this monster would be
                model.Payload = JsonSerialization.ToJson(envelope.Message, true);
            }
            catch (Exception)
            {
                model.Payload = "Could not render as JSON";
            }

            return model;
        }
Пример #2
0
        public void Setup()
        {
            _queue = ObjectMother.QueueManager();
            _queue.Start();

            _receiver = ObjectMother.QueueManager("test2", 23457);
            using (var tx = new TransactionScope())
            {
                _messageId = _queue.Send(
                    new Uri("lq.tcp://localhost:23457/h"),
                    new MessagePayload
                    {
                        Data = new byte[] {1, 2, 4, 5}
                    });

                tx.Complete();
            }
        }
Пример #3
0
 public PersistentMessageToSend GetMessageCurrentlySendingById(MessageId id)
 {
     AssertNotDisposedOrDisposing();
     return _queueStorage.Send(actions => actions.GetMessageToSendById(id.MessageIdentifier));
 }
Пример #4
0
 public PersistentMessageToSend GetSentMessageById(MessageId id)
 {
     AssertNotDisposedOrDisposing();
     return _queueStorage.Global(actions => actions.GetSentMessageById(id.MessageIdentifier));
 }
Пример #5
0
 public HistoryMessage GetProcessedMessageById(string queueName, MessageId id)
 {
     AssertNotDisposedOrDisposing();
     return _queueStorage.Global(actions => actions.GetQueue(queueName).GetProcessedMessageById(id.MessageIdentifier));
 }
Пример #6
0
        public PersistentMessage PeekById(MessageId id)
        {
            var enumerator = _messages.GetEnumerator(new MessageIdIndex(id));

            while(enumerator.MoveNext())
            {
                var bookmark = enumerator.Current;
                bookmark.QueueName = _queueName;

                var status = (MessageStatus) _messages.ForColumnType<IntColumn>().Get("status");

                if (status != MessageStatus.ReadyToDeliver)
                    continue;
                return _messages.ReadMessageWithId<PersistentMessage>(bookmark, _queueName);
            }

            return null;
        }
Пример #7
0
 public static void EnqueueDirectlyTo(this ITransactionalScope scope, string queue, MessagePayload payload, MessageId id = null)
 {
     scope.QueueManager.EnqueueDirectlyTo(scope.Transaction, queue, null, payload, id);
 }
Пример #8
0
        public PersistentMessage PeekById(string queueName, MessageId id)
        {
            PersistentMessage message = null;
            _queueStorage.Global(actions =>
            {
                var queue = actions.GetQueue(queueName);

                message = queue.PeekById(id);

            });
            return message;
        }
Пример #9
0
        public void EnqueueDirectlyTo(string queue, string subqueue, MessagePayload payload, MessageId id = null)
        {
            EnsureEnlistment();

            EnqueueDirectlyTo(_enlistment, queue, subqueue, payload);
        }
Пример #10
0
 public void MarkReceived(MessageId id)
 {
     recveivedMsgs.Insert(() =>
     {
         recveivedMsgs.ForColumnType<GuidColumn>().Set("instance_id", id.SourceInstanceId);
         recveivedMsgs.ForColumnType<GuidColumn>().Set("msg_id", id.MessageIdentifier);
     });
 }
Пример #11
0
 public bool Equals(MessageId other)
 {
     if (ReferenceEquals(null, other)) return false;
     if (ReferenceEquals(this, other)) return true;
     return other.SourceInstanceId.Equals(SourceInstanceId) && other.MessageIdentifier.Equals(MessageIdentifier);
 }
Пример #12
0
        public PersistentMessage PeekById(MessageId id)
        {
            var enumerator = _messages.GetEnumerator(new MessageIdIndex(id));

            while(enumerator.MoveNext())
            {
                var bookmark = enumerator.Current;
                bookmark.QueueName = _queueName;

                return _messages.ReadMessageWithId<PersistentMessage>(bookmark, _queueName);
            }

            return null;
        }
Пример #13
0
 public MessageIdIndex(MessageId id)
     : base("by_id")
 {
     _id = id;
 }
Пример #14
0
 public static Message ReceiveById(this ITransactionalScope scope, string queue, MessageId id)
 {
     return scope.QueueManager.ReceiveById(scope.Transaction, queue, id);
 }
Пример #15
0
        public Message ReceiveById(string queueName, MessageId id)
        {
            EnsureEnlistment();

            return ReceiveById(_enlistment, queueName, id);
        }
        public QueueMessageVisualization get_message_details_Port_QueueName_SourceInstanceId_MessageId(
            MessageInputModel input)
        {
            var messageId = new MessageId
            {
                MessageIdentifier = input.MessageId,
                SourceInstanceId = input.SourceInstanceId
            };
            var message = RetrieveMessage(messageId, input.Port, input.QueueName);

            if (message == null)
            {
                _fubuRequest.Set(new QueueMessageNotFound
                {
                    Id = messageId,
                    QueueName = input.QueueName
                });

                return null;
            }

            var envelope = message.ToEnvelope();
            envelope.UseSerializer(_serializer);

            return new QueueMessageVisualization
            {
                MessageId = messageId,
                QueueName = message.Queue,
                SubQueueName = message.SubQueue,
                Status = message.Status,
                SentAt = message.SentAt,
                Headers = message.Headers,
                Payload = envelope.Message
            };
        }
Пример #17
0
        public Message ReceiveById(ITransaction transaction, string queueName, MessageId id)
        {
            var message = _queueStorage.Global(actions =>
            {
                var queue = actions.GetQueue(queueName);

                var msg = queue.PeekById(id);
                if (msg == null)
                    return null;
                queue.SetMessageStatus(msg.Bookmark, MessageStatus.Processing);
                actions.RegisterUpdateToReverse(transaction.Id, msg.Bookmark, MessageStatus.ReadyToDeliver, null);

                return msg;
            });
            return message;
        }
        private PersistentMessage RetrieveMessage(MessageId messageId, int port, string queueName)
        {
            var request = new QueueMessageRetrievalRequest
            {
                Port = port,
                QueueName = queueName,
                MessageId = new MessageId
                {
                    MessageIdentifier = messageId.MessageIdentifier,
                    SourceInstanceId = messageId.SourceInstanceId
                }
            };

            return _queueMessageRetrieval.GetSingleMessageInQueue(request);
        }
Пример #19
0
        public void EnqueueDirectlyTo(ITransaction transaction, string queue, string subqueue, MessagePayload payload, MessageId id = null)
        {
            var message = new PersistentMessage
            {
                Data = payload.Data,
                Headers = payload.Headers,
                Id = id ?? new MessageId
                {
                    SourceInstanceId = _queueStorage.Id,
                    MessageIdentifier = GuidCombGenerator.Generate()
                },
                Queue = queue,
                SentAt = DateTime.Now,
                SubQueue = subqueue,
                Status = MessageStatus.EnqueueWait
            };

            _queueStorage.Global(actions =>
            {
                var queueActions = actions.GetQueue(queue);

                var bookmark = queueActions.Enqueue(message);
                actions.RegisterUpdateToReverse(transaction.Id, bookmark, MessageStatus.EnqueueWait, subqueue);

            });

            _logger.QueuedForReceive(message);

            lock (_newMessageArrivedLock)
            {
                Monitor.PulseAll(_newMessageArrivedLock);
            }
        }
        public ErrorQueueMessageVisualization get_error_message_details_Port_QueueName_SourceInstanceId_MessageId(
            ErrorMessageInputModel input)
        {
            var messageId = new MessageId
            {
                MessageIdentifier = input.MessageId,
                SourceInstanceId = input.SourceInstanceId
            };
            var message = RetrieveMessage(messageId, input.Port, input.QueueName);

            if (message == null)
            {
                _fubuRequest.Set(new QueueMessageNotFound
                {
                    Id = messageId,
                    QueueName = input.QueueName
                });

                return null;
            }

            var errorReport = ErrorReport.Deserialize(message.Data);
            var exceptionDetails = new ExceptionDetails
            {
                Explanation = errorReport.Explanation,
                ExceptionType = errorReport.ExceptionType,
                ExceptionMessage = errorReport.ExceptionMessage,
                ExceptionText = errorReport.ExceptionText
            };

            var envelope = new Envelope(new NameValueHeaders(message.Headers)) {Data = errorReport.RawData};
            envelope.UseSerializer(_serializer);

            return new ErrorQueueMessageVisualization
            {
                MessageId = messageId,
                QueueName = message.Queue,
                SubQueueName = message.SubQueue,
                Status = message.Status,
                SentAt = message.SentAt,
                Headers = message.Headers,
                Payload = envelope.Message,
                ExceptionDetails = exceptionDetails
            };
        }
Пример #21
0
        public MessageId Send(ITransaction transaction, Uri uri, MessagePayload payload)
        {
            if (_waitingForAllMessagesToBeSent)
                throw new CannotSendWhileWaitingForAllMessagesToBeSentException("Currently waiting for all messages to be sent, so we cannot send. You probably have a race condition in your application.");

            var parts = uri.AbsolutePath.Substring(1).Split('/');
            var queue = parts[0];
            string subqueue = null;
            if (parts.Length > 1)
            {
                subqueue = string.Join("/", parts.Skip(1).ToArray());
            }

            Guid msgId = Guid.Empty;

            var port = uri.Port;
            if (port == -1)
                port = 2200;
            var destination = new Endpoint(uri.Host, port);

            _queueStorage.Global(actions =>
            {
                msgId = actions.RegisterToSend(destination, queue,
                                               subqueue, payload, transaction.Id);

            });

            var messageId = new MessageId
            {
                SourceInstanceId = _queueStorage.Id,
                MessageIdentifier = msgId
            };
            var message = new Message
            {
                Id = messageId,
                Data = payload.Data,
                Headers = payload.Headers,
                Queue = queue,
                SubQueue = subqueue
            };

            _logger.QueuedForSend(message, destination);

            return messageId;
        }
Пример #22
0
 public Message PeekById(MessageId id)
 {
     return queueManager.PeekById(queueName, id);
 }