示例#1
0
        public async Task FillData()
        {
            List <byte[]> items = new List <byte[]>();

            for (int i = 0; i < 10; i++)
            {
                items.Add(Encoding.UTF8.GetBytes("No #" + i));
            }

            TestMqServer server = new TestMqServer();

            server.Initialize(40702);
            server.Start(300, 300);

            Channel channel = server.Server.FindChannel("ch-push");

            Assert.NotNull(channel);

            ChannelQueue queue = channel.FindQueue(MessageA.ContentType);

            Assert.NotNull(queue);

            QueueFiller filler = new QueueFiller(queue);

            filler.FillData(items, false, true);
            filler.FillData(items, false, false);

            await Task.Delay(500);

            Assert.NotEmpty(queue.HighPriorityMessages);
            Assert.NotEmpty(queue.RegularMessages);
        }
示例#2
0
        public async Task FillData()
        {
            List <byte[]> items = new List <byte[]>();

            for (int i = 0; i < 10; i++)
            {
                items.Add(Encoding.UTF8.GetBytes("No #" + i));
            }

            TestHorseMq server = new TestHorseMq();
            await server.Initialize();

            server.Start(300, 300);

            HorseQueue queue = server.Server.FindQueue("push-a");

            Assert.NotNull(queue);

            QueueFiller filler = new QueueFiller(queue);

            filler.FillData(items, false, true);
            filler.FillData(items, false, false);

            await Task.Delay(500);

            Assert.NotEmpty(queue.PriorityMessages);
            Assert.NotEmpty(queue.Messages);
        }
示例#3
0
        public async Task FillJson()
        {
            List <QueueMessageA> items = new List <QueueMessageA>();

            for (int i = 0; i < 10; i++)
            {
                items.Add(new QueueMessageA("No #" + i));
            }

            TestHorseMq server = new TestHorseMq();
            await server.Initialize();

            server.Start(300, 300);

            HorseQueue route = server.Server.FindQueue("broadcast-a");
            HorseQueue push  = server.Server.FindQueue("push-a");

            Assert.NotNull(route);
            Assert.NotNull(push);

            QueueFiller fillerRouteA = new QueueFiller(route);
            QueueFiller fillerPushA  = new QueueFiller(push);

            fillerRouteA.FillJson(items, false, false);
            fillerPushA.FillJson(items, false, false);

            await Task.Delay(500);

            Assert.NotEmpty(route.Messages);
            Assert.NotEmpty(push.Messages);
        }
示例#4
0
        public async Task FillJson()
        {
            List <MessageA> items = new List <MessageA>();

            for (int i = 0; i < 10; i++)
            {
                items.Add(new MessageA("No #" + i));
            }

            TestMqServer server = new TestMqServer();

            server.Initialize(47701);
            server.Start(300, 300);

            Channel route = server.Server.FindChannel("ch-route");
            Channel push  = server.Server.FindChannel("ch-push");

            Assert.NotNull(route);
            Assert.NotNull(push);

            ChannelQueue routeA = route.FindQueue(MessageA.ContentType);
            ChannelQueue pushA  = push.FindQueue(MessageA.ContentType);

            Assert.NotNull(routeA);
            Assert.NotNull(pushA);

            QueueFiller fillerRouteA = new QueueFiller(routeA);
            QueueFiller fillerPushA  = new QueueFiller(pushA);

            await fillerRouteA.FillJson(items, false, false);

            await fillerPushA.FillJson(items, false, false);

            await Task.Delay(500);

            Assert.NotEmpty(routeA.RegularMessages);
            Assert.NotEmpty(pushA.RegularMessages);
        }
示例#5
0
        /// <summary>
        /// Initializes queue, opens database files and fills messages into the queue
        /// </summary>
        public virtual async Task Initialize()
        {
            if (Queue.Options.Acknowledge == QueueAckDecision.None)
            {
                if (DeleteWhen == DeleteWhen.AfterAcknowledgeReceived)
                {
                    throw new NotSupportedException("Delete option is AfterAcknowledgeReceived but queue Acknowledge option is None. " +
                                                    "Messages are not deleted from disk with this configuration. " +
                                                    "Please change queue Acknowledge option or DeleteWhen option");
                }

                if (ProducerAckDecision == ProducerAckDecision.AfterConsumerAckReceived)
                {
                    throw new NotSupportedException("Producer Ack option is AfterConsumerAckReceived but queue Acknowledge option is None. " +
                                                    "Messages are not deleted from disk with this configuration. " +
                                                    "Please change queue Acknowledge option or ProducerAckDecision option");
                }
            }

            await Database.Open();

            Queue.OnDestroyed += Destroy;

            List <KeyValuePair <string, int> > deliveries = null;

            if (UseRedelivery)
            {
                RedeliveryService = new RedeliveryService(Database.File.Filename + ".delivery");
                await RedeliveryService.Load();

                deliveries = RedeliveryService.GetDeliveries();
            }

            var dict = await Database.List();

            if (dict.Count > 0)
            {
                QueueFiller filler = new QueueFiller(Queue);
                PushResult  result = filler.FillMessage(dict.Values,
                                                        true,
                                                        qm =>
                {
                    if (!UseRedelivery ||
                        deliveries == null ||
                        deliveries.Count == 0 ||
                        string.IsNullOrEmpty(qm.Message.MessageId))
                    {
                        return;
                    }

                    var kv = deliveries.FirstOrDefault(x => x.Key == qm.Message.MessageId);
                    if (kv.Value > 0)
                    {
                        qm.DeliveryCount = kv.Value;
                    }
                });

                if (result != PushResult.Success)
                {
                    throw new InvalidOperationException($"Cannot fill messages into {Queue.Name} queue : {result}");
                }
            }
        }