Ejemplo n.º 1
0
        public void SynchronousTestListAllQueueMessagesWithUpdates()
        {
            IQueueingService provider  = CreateProvider();
            QueueName        queueName = CreateRandomQueueName();

            provider.CreateQueue(queueName);

            for (int i = 0; i < 28; i++)
            {
                provider.PostMessages(queueName, new Message <SampleMetadata>(TimeSpan.FromSeconds(120), new SampleMetadata(i, "Some Message " + i)));
            }

            HashSet <int> locatedMessages = new HashSet <int>();

            QueuedMessageList messages = provider.ListMessages(queueName, null, null, true, false);

            foreach (QueuedMessage message in messages)
            {
                Assert.IsTrue(locatedMessages.Add(message.Body.ToObject <SampleMetadata>().ValueA), "Received the same message more than once.");
            }

            int deletedMessage = messages[0].Body.ToObject <SampleMetadata>().ValueA;

            provider.DeleteMessage(queueName, messages[0].Id, null);

            while (messages.Count > 0)
            {
                QueuedMessageList tempList = provider.ListMessages(queueName, messages.NextPageId, null, true, false);
                if (tempList.Count > 0)
                {
                    Assert.IsTrue(locatedMessages.Add(tempList[0].Body.ToObject <SampleMetadata>().ValueA), "Received the same message more than once.");
                    provider.DeleteMessage(queueName, tempList[0].Id, null);
                }

                messages = provider.ListMessages(queueName, messages.NextPageId, null, true, false);
                foreach (QueuedMessage message in messages)
                {
                    Assert.IsTrue(locatedMessages.Add(message.Body.ToObject <SampleMetadata>().ValueA), "Received the same message more than once.");
                }
            }

            Assert.AreEqual(28, locatedMessages.Count);
            for (int i = 0; i < 28; i++)
            {
                Assert.IsTrue(locatedMessages.Contains(i), "The message listing did not include message '{0}', which was in the queue when the listing started and still in it afterwards.", i);
            }

            provider.DeleteQueue(queueName);
        }
Ejemplo n.º 2
0
        private void PublishMessages(QueueName requestQueueName, QueueName replyQueueName, ref int processedMessages, CancellationToken token)
        {
            IQueueingService queueingService = CreateProvider();

            processedMessages = 0;
            Random random = new Random();

            while (true)
            {
                long x = random.Next();
                long y = random.Next();

                Message <CalculatorOperation> message = new Message <CalculatorOperation>(TimeSpan.FromMinutes(5), new CalculatorOperation(replyQueueName, "+", x, y));
                queueingService.PostMessages(requestQueueName, message);

                bool handled = false;
                while (true)
                {
                    // process reply messages
                    using (Claim claim = queueingService.ClaimMessage(replyQueueName, null, TimeSpan.FromMinutes(1), TimeSpan.FromMinutes(1)))
                    {
                        foreach (QueuedMessage queuedMessage in claim.Messages)
                        {
                            CalculatorResult result = queuedMessage.Body.ToObject <CalculatorResult>();
                            if (result._id == message.Body._id)
                            {
                                // this is the reply to this thread's operation
                                Assert.AreEqual(message.Body._operand1 + message.Body._operand2, result._result);
                                Assert.AreEqual(x + y, result._result);
                                queueingService.DeleteMessage(replyQueueName, queuedMessage.Id, claim);
                                processedMessages++;
                                handled = true;
                            }
                            else if (token.IsCancellationRequested)
                            {
                                // shutdown trigger
                                return;
                            }
                        }
                    }

                    if (handled)
                    {
                        break;
                    }

                    if (token.IsCancellationRequested)
                    {
                        // shutdown trigger
                        return;
                    }
                }

                if (token.IsCancellationRequested)
                {
                    // shutdown trigger
                    return;
                }
            }
        }