예제 #1
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);
            }
        }
예제 #2
0
        /// <summary>
        /// Enqueue the messages in the collection for relaying.
        /// </summary>
        /// <param name="inboundMessages">Messages to enqueue.</param>
        public static void Enqueue(MtaMessageCollection inboundMessages)
        {
            Parallel.ForEach(inboundMessages, message => {
                Enqueue(MtaQueuedMessage.CreateNew(message));
            });

            RabbitMqManager.Ack(RabbitMqManager.RabbitMqQueue.Inbound, inboundMessages.Max(m => m.RabbitMqDeliveryTag), true);
        }
예제 #3
0
 /// <summary>
 /// Acknowledge the message as handled.
 /// </summary>
 /// <param name="msg">The message to acknowledge.</param>
 internal static void Ack(MtaQueuedMessage msg)
 {
     RabbitMqManager.Ack(RabbitMqManager.RabbitMqQueue.OutboundWaiting, msg.RabbitMqDeliveryTag, false);
 }