Example #1
0
        private void HandleDequeue()
        {
            while (!IsStopping)
            {
                BasicDeliverEventArgs ea = RabbitMq.RabbitMqManager.Dequeue(RabbitMqManager.RabbitMqQueue.InboundStaging, 1, 100).FirstOrDefault();
                if (ea == null)
                {
                    //await Task.Delay(1000);
                    System.Threading.Thread.Sleep(1000);
                    continue;
                }

                MtaQueuedMessage qmsg = Serialisation.Deserialise <MtaQueuedMessage>(ea.Body).Result;
                MtaMessage       msg  = new MtaMessage
                {
                    ID                = qmsg.ID,
                    InternalSendID    = qmsg.InternalSendID,
                    MailFrom          = qmsg.MailFrom,
                    RcptTo            = qmsg.RcptTo,
                    VirtualMTAGroupID = qmsg.VirtualMTAGroupID
                };

                RabbitMqManager.Publish(msg, RabbitMqManager.RabbitMqQueue.Inbound, true, qmsg.RabbitMqPriority).Wait();
                RabbitMqManager.Publish(qmsg, RabbitMqManager.RabbitMqQueue.OutboundWaiting, true, qmsg.RabbitMqPriority).Wait();
                RabbitMqManager.Ack(RabbitMqManager.RabbitMqQueue.InboundStaging, ea.DeliveryTag, false);
            }
        }
Example #2
0
        private static void HandleDequeue()
        {
            if (_StartedThreads >= STAGING_DEQUEUE_THREADS)
            {
                return;
            }

            _StartedThreads++;

            while (true)
            {
                BasicDeliverEventArgs ea = RabbitMq.RabbitMqManager.Dequeue(RabbitMqManager.RabbitMqQueue.InboundStaging, 1, 100).FirstOrDefault();
                if (ea == null)
                {
                    Thread.Sleep(1000);
                    continue;
                }

                MtaQueuedMessage qmsg = Serialisation.Deserialise <MtaQueuedMessage>(ea.Body);
                MtaMessage       msg  = new MtaMessage(qmsg.ID, qmsg.VirtualMTAGroupID, qmsg.InternalSendID, qmsg.MailFrom, qmsg.RcptTo, string.Empty);

                RabbitMqManager.Publish(msg, RabbitMqManager.RabbitMqQueue.Inbound, true);
                RabbitMqManager.Publish(qmsg, RabbitMqManager.RabbitMqQueue.OutboundWaiting, true);
                RabbitMqManager.Ack(RabbitMqManager.RabbitMqQueue.InboundStaging, ea.DeliveryTag, false);
            }
        }
Example #3
0
        /// <summary>
        /// Dequeue a message from RabbitMQ.
        /// </summary>
        /// <returns>A dequeued message or null if there weren't any.</returns>
        public static async Task <MtaQueuedMessage> Dequeue()
        {
            BasicDeliverEventArgs ea = RabbitMqManager.Dequeue(RabbitMqManager.RabbitMqQueue.OutboundWaiting, 1, 100).FirstOrDefault();

            if (ea == null)
            {
                return(null);
            }

            MtaQueuedMessage qmsg = await Serialisation.Deserialise <MtaQueuedMessage>(ea.Body);

            qmsg.RabbitMqDeliveryTag = ea.DeliveryTag;
            qmsg.IsHandled           = false;
            return(qmsg);
        }
Example #4
0
        public void CanDeSerialiseTable()
        {
            var serialiser = new Serialisation();
            var generator  = new TableGenerator(new GeneratorSettings {
                CharacterString = Alphabet.English, Size = 1000
            });
            var table       = generator.Generate();
            var result      = serialiser.Serliaise(table);
            var resultTable = serialiser.Deserialise <TokenTableSet>(result);

            for (var i = 0; i < 1000; i++)
            {
                foreach (var character in Alphabet.English)
                {
                    Assert.AreEqual(table.ForwardTable[i][character].Item1, resultTable.ForwardTable[i][character].Item1);
                    Assert.AreEqual(table.ForwardTable[i][character].Item2, resultTable.ForwardTable[i][character].Item2);
                }
            }
        }
Example #5
0
        /// <summary>
        /// Dequeues a collection of inbound messages from RabbitMQ.
        /// </summary>
        /// <param name="maxItems">The maximum amount of messages to dequeue.</param>
        /// <returns>The dequeue messages.</returns>
        public static MtaMessageCollection Dequeue(int maxItems)
        {
            List <BasicDeliverEventArgs> items    = RabbitMqManager.Dequeue(RabbitMqManager.RabbitMqQueue.Inbound, maxItems, 1 * 1000);
            MtaMessageCollection         messages = new MtaMessageCollection();

            if (items.Count == 0)
            {
                return(messages);
            }

            foreach (BasicDeliverEventArgs ea in items)
            {
                MtaMessage msg = Serialisation.Deserialise <MtaMessage>(ea.Body);
                msg.RabbitMqDeliveryTag = ea.DeliveryTag;
                messages.Add(msg);
            }

            return(messages);
        }
        private static async Task HandleDequeue()
        {
            if (_StartedThreads >= STAGING_DEQUEUE_THREADS)
            {
                return;
            }

            _StartedThreads++;

            while (true)
            {
                BasicDeliverEventArgs ea = RabbitMq.RabbitMqManager.Dequeue(RabbitMqManager.RabbitMqQueue.InboundStaging, 1, 100).FirstOrDefault();
                if (ea == null)
                {
                    await Task.Delay(1000);

                    continue;
                }

                MtaQueuedMessage qmsg = await Serialisation.Deserialise <MtaQueuedMessage>(ea.Body);

                MtaMessage msg = new MtaMessage
                {
                    ID                = qmsg.ID,
                    InternalSendID    = qmsg.InternalSendID,
                    MailFrom          = qmsg.MailFrom,
                    RcptTo            = qmsg.RcptTo,
                    VirtualMTAGroupID = qmsg.VirtualMTAGroupID
                };

                await RabbitMqManager.Publish(msg, RabbitMqManager.RabbitMqQueue.Inbound, true, (RabbitMqPriority)qmsg.RabbitMqPriority);

                await RabbitMqManager.Publish(qmsg, RabbitMqManager.RabbitMqQueue.OutboundWaiting, true, (RabbitMqPriority)qmsg.RabbitMqPriority);

                RabbitMqManager.Ack(RabbitMqManager.RabbitMqQueue.InboundStaging, ea.DeliveryTag, false);
            }
        }