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); } }
/// <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); }
/// <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); }