Example #1
0
        public void Should_call_ack_on_nested_subscriptions_with_all_delivery_tag()
        {
            // Arrange
            var channel = Substitute.For <IModel>();

            channel.IsOpen.Returns(true);
            var subs         = new CompositeSubscription();
            var subscription = new Subscription
            {
                ConsumerTag      = "ConsumerTag",
                QueueName        = "QueueName",
                SubscriptionName = "SubscriptionName"
            };

            subscription.SetChannel(channel);
            subs.AddSubscription(subscription);

            // Action
            subs.Ack("ConsumerTag", new[] { (ulong)1, (ulong)2, (ulong)3, (ulong)4, (ulong)5 });

            // Assert
            channel.Received().BasicAck(1, false);
            channel.Received().BasicAck(2, false);
            channel.Received().BasicAck(3, false);
            channel.Received().BasicAck(4, false);
            channel.Received().BasicAck(5, false);
        }
Example #2
0
        public void Should_call_ack_on_nested_subscriptions_with_all_delivery_tag()
        {
            // Arrange
            var channel = Substitute.For <IModel>();

            channel.IsOpen.Returns(true);
            var subs         = new CompositeSubscription();
            var subscription = new Subscription
            {
                ConsumerTag      = "ConsumerTag",
                QueueName        = "QueueName",
                SubscriptionName = "SubscriptionName"
            };

            subscription.SetChannel(channel);
            subs.AddSubscription(subscription);

            // Action
            Subscription.OutstandingDeliveryTags["ConsumerTag"] = new List <ulong>();
            Subscription.OutstandingDeliveryTags["ConsumerTag"].AddRange(new ulong[] { 1, 2, 3, 4, 5 });
            subs.Ack("ConsumerTag", new[] { (ulong)1, (ulong)2, (ulong)3, (ulong)4, (ulong)5 });


            // Assert
            channel.Received().BasicAck(5, true);
        }
        public static void StartAsync()
        {
            Global.DefaultWatcher.InfoFormat("* Target PRIORITY queues are Burrow.Queue.BurrowTestApp.Bunny_Priority0 -> 3");
            Thread.Sleep(2000);
            PrintNotes();
            Console.ReadLine();
            const ushort maxPriorityLevel = 3;

            var tunnel = RabbitTunnel.Factory.WithPrioritySupport()
                         .Create().WithPrioritySupport();

            var totalMsg = tunnel.GetMessageCount(new PrioritySubscriptionOption <Bunny>
            {
                SubscriptionName = "BurrowTestApp",
                MaxPriorityLevel = maxPriorityLevel
            });

            Global.DefaultWatcher.InfoFormat(string.Format("There are total {0} messages in all priority queues", totalMsg));

            // SubscribeAsync auto Ack
            CompositeSubscription subscription = null;
            Action <Bunny, MessageDeliverEventArgs> messageHandler = (bunny, subscriptionData) =>
            {
                var error = false;
                try
                {
                    ProcessMessage(bunny);
                }
                catch (Exception)
                {
                    error = true;
                    if (subscription != null)
                    {
                        subscription.Nack(subscriptionData.ConsumerTag, subscriptionData.DeliveryTag, false);
                    }
                }
                finally
                {
                    if (subscription != null && !error)
                    {
                        subscription.Ack(subscriptionData.ConsumerTag, subscriptionData.DeliveryTag);
                    }
                }
            };

            subscription = tunnel.SubscribeAsync(new PriorityAsyncSubscriptionOption <Bunny>
            {
                SubscriptionName  = "BurrowTestApp",
                MaxPriorityLevel  = maxPriorityLevel,
                MessageHandler    = messageHandler,
                QueuePrefetchSize = 10,
                BatchSize         = 1
            });
        }
Example #4
0
        public void Should_call_ack_on_nested_subscriptions()
        {
            // Arrange
            var channel = Substitute.For <IModel>();

            channel.IsOpen.Returns(true);
            var subs         = new CompositeSubscription();
            var subscription = new Subscription
            {
                ConsumerTag      = "ConsumerTag",
                QueueName        = "QueueName",
                SubscriptionName = "SubscriptionName"
            };

            subscription.SetChannel(channel);
            subs.AddSubscription(subscription);

            // Action
            subs.Ack("ConsumerTag", 1);

            // Assert
            channel.Received().BasicAck(1, false);
        }