private MessageEnvelop ToMessage(CloudQueueMessage envelop)
        {
            if (envelop == null)
            {
                return(null);
            }

            MessageEnvelop message = null;

            try
            {
                message = JsonConverter.FromJson <MessageEnvelop>(envelop.AsString);
            }
            catch
            {
                // Handle broken messages gracefully
                _logger.Warn(null, "Cannot deserialize message: " + envelop.AsString);
            }

            // If message is broken or null
            if (message == null)
            {
                message = new MessageEnvelop
                {
                    Message = envelop.AsString
                };
            }

            message.SentTimeUtc = envelop.InsertionTime.HasValue
                ? envelop.InsertionTime.Value.UtcDateTime : DateTime.UtcNow;
            message.MessageId = envelop.Id;
            message.Reference = envelop;

            return(message);
        }
        public override async Task MoveToDeadLetterAsync(MessageEnvelop message)
        {
            CheckOpened(message.CorrelationId);
            var envelop = (CloudQueueMessage)message.Reference;

            if (envelop != null)
            {
                // Resend message to dead queue if it is defined
                if (_deadQueue != null)
                {
                    await _deadQueue.CreateIfNotExistsAsync();

                    var content  = JsonConverter.ToJson(message);
                    var envelop2 = new CloudQueueMessage(content);
                    await _deadQueue.AddMessageAsync(envelop2, null, null, null, null, _cancel.Token);
                }
                else
                {
                    _logger.Warn(message.CorrelationId, "No dead letter queue is defined for {0}. The message is discarded.", this);
                }

                // Remove the message from the queue
                await _queue.DeleteMessageAsync(envelop.Id, envelop.PopReceipt, null, null, _cancel.Token);

                message.Reference = null;

                _counters.IncrementOne("queue." + Name + ".dead_messages");
                _logger.Trace(message.CorrelationId, "Moved to dead message {0} at {1}", message, this);
            }
        }
        public override async Task SendAsync(string correlationId, MessageEnvelop message)
        {
            CheckOpened(correlationId);
            var content = JsonConverter.ToJson(message);

            var envelop = new CloudQueueMessage(content);
            await _queue.AddMessageAsync(envelop, null, null, null, null, _cancel.Token);

            _counters.IncrementOne("queue." + Name + ".sent_messages");
            _logger.Debug(message.CorrelationId, "Sent message {0} via {1}", message, this);
        }
Ejemplo n.º 4
0
        public async Task TestMessageCountAsync()
        {
            var envelop1 = new MessageEnvelop("123", "Test", "Test message");
            await _queue.SendAsync(null, envelop1);

            await Task.Delay(500);

            var count = _queue.MessageCount;

            Assert.NotNull(count);
            //Assert.IsTrue(count > 0);
        }
        public override async Task CompleteAsync(MessageEnvelop message)
        {
            CheckOpened(message.CorrelationId);
            var envelop = (CloudQueueMessage)message.Reference;

            if (envelop != null)
            {
                await _queue.DeleteMessageAsync(envelop.Id, envelop.PopReceipt, null, null, _cancel.Token);

                message.Reference = null;
                _logger.Trace(message.CorrelationId, "Completed message {0} at {1}", message, this);
            }
        }
        public override async Task RenewLockAsync(MessageEnvelop message, long lockTimeout)
        {
            CheckOpened(message.CorrelationId);
            // Extend the message visibility
            var envelop = (CloudQueueMessage)message.Reference;

            if (envelop != null)
            {
                await _queue.UpdateMessageAsync(envelop, TimeSpan.FromMilliseconds(lockTimeout), MessageUpdateFields.Visibility);

                _logger.Trace(message.CorrelationId, "Renewed lock for message {0} at {1}", message, this);
            }
        }
        public override async Task AbandonAsync(MessageEnvelop message)
        {
            CheckOpened(message.CorrelationId);
            // Make the message immediately visible
            var envelop = (CloudQueueMessage)message.Reference;

            if (envelop != null)
            {
                await _queue.UpdateMessageAsync(envelop, TimeSpan.FromMilliseconds(0), MessageUpdateFields.Visibility);

                message.Reference = null;
                _logger.Trace(message.CorrelationId, "Abandoned message {0} at {1}", message, this);
            }
        }
Ejemplo n.º 8
0
        public async Task TestMoveToDeadMessageAsync()
        {
            var envelop1 = new MessageEnvelop("123", "Test", "Test message");
            await _queue.SendAsync(null, envelop1);

            var envelop2 = await _queue.ReceiveAsync(null, 10000);

            Assert.NotNull(envelop2);
            Assert.Equal(envelop1.MessageType, envelop2.MessageType);
            Assert.Equal(envelop1.Message, envelop2.Message);
            Assert.Equal(envelop1.CorrelationId, envelop2.CorrelationId);

            await _queue.MoveToDeadLetterAsync(envelop2);
        }
Ejemplo n.º 9
0
        public async Task TestSendPeekMessageAsync()
        {
            var envelop1 = new MessageEnvelop("123", "Test", "Test message");
            await _queue.SendAsync(null, envelop1);

            await Task.Delay(500);

            var envelop2 = await _queue.PeekAsync(null);

            Assert.NotNull(envelop2);
            Assert.Equal(envelop1.MessageType, envelop2.MessageType);
            Assert.Equal(envelop1.Message, envelop2.Message);
            Assert.Equal(envelop1.CorrelationId, envelop2.CorrelationId);
        }
Ejemplo n.º 10
0
        public async Task TestReceiveSendMessageAsync()
        {
            var envelop1 = new MessageEnvelop("123", "Test", "Test message");

            ThreadPool.QueueUserWorkItem(async delegate {
                Thread.Sleep(500);
                await _queue.SendAsync(null, envelop1);
            });

            var envelop2 = await _queue.ReceiveAsync(null, 10000);

            Assert.NotNull(envelop2);
            Assert.Equal(envelop1.MessageType, envelop2.MessageType);
            Assert.Equal(envelop1.Message, envelop2.Message);
            Assert.Equal(envelop1.CorrelationId, envelop2.CorrelationId);
        }
Ejemplo n.º 11
0
        public async Task TestSendReceiveMessageAsync()
        {
            var envelop1 = new MessageEnvelop("123", "Test", "Test message");
            await _queue.SendAsync(null, envelop1);

            var count = _queue.MessageCount;

            Assert.True(count > 0);

            var envelop2 = await _queue.ReceiveAsync(null, 10000);

            Assert.NotNull(envelop2);
            Assert.Equal(envelop1.MessageType, envelop2.MessageType);
            Assert.Equal(envelop1.Message, envelop2.Message);
            Assert.Equal(envelop1.CorrelationId, envelop2.CorrelationId);
        }
Ejemplo n.º 12
0
        public async Task TestReceiveAndCompleteMessageAsync()
        {
            var envelop1 = new MessageEnvelop("123", "Test", "Test message");
            await _queue.SendAsync(null, envelop1);

            var envelop2 = await _queue.ReceiveAsync(null, 10000);

            Assert.NotNull(envelop2);
            Assert.Equal(envelop1.MessageType, envelop2.MessageType);
            Assert.Equal(envelop1.Message, envelop2.Message);
            Assert.Equal(envelop1.CorrelationId, envelop2.CorrelationId);

            await _queue.CompleteAsync(envelop2);

            //envelop2 = await _queue.PeekAsync();
            //Assert.IsNull(envelop2);
        }
Ejemplo n.º 13
0
        public async Task TestOnMessageAsync()
        {
            var            envelop1 = new MessageEnvelop("123", "Test", "Test message");
            MessageEnvelop envelop2 = null;

            _queue.BeginListen(null, async(envelop, queue) => {
                envelop2 = envelop;
                await Task.Delay(0);
            });

            await _queue.SendAsync(null, envelop1);

            await Task.Delay(100);

            Assert.NotNull(envelop2);
            Assert.Equal(envelop1.MessageType, envelop2.MessageType);
            Assert.Equal(envelop1.Message, envelop2.Message);
            Assert.Equal(envelop1.CorrelationId, envelop2.CorrelationId);

            await _queue.CloseAsync(null);
        }