Example #1
0
        public IEnumerable <EnvelopeToken> ReplayDelayed(QueueManager queueManager, DateTime currentTime)
        {
            var list = new List <EnvelopeToken>();

            var transactionalScope = queueManager.BeginTransactionalScope();

            try
            {
                var readyToSend = _delayedMessages.AllMessagesBefore(currentTime);

                readyToSend.Each(x =>
                {
                    var message = transactionalScope.ReceiveById(LightningQueuesTransport.DelayedQueueName, x);
                    var uri     = message.Headers[Envelope.ReceivedAtKey].ToLightningUri();
                    MessagePayload messagePayload = message.ToPayload();
                    transactionalScope.EnqueueDirectlyTo(uri.QueueName, messagePayload);
                    list.Add(message.ToToken());
                });
                transactionalScope.Commit();
            }

            catch (Exception e)
            {
                transactionalScope.Rollback();
                _logger.Error("Error trying to move delayed messages back to the original queue", e);
            }

            return(list);
        }