in src/MessageConsumer.cs [1731:1763]
private void WaitForRedeliveries()
{
if (failoverRedeliveryWaitPeriod > 0 && previouslyDeliveredMessages != null)
{
DateTime expiry = DateTime.Now + TimeSpan.FromMilliseconds(failoverRedeliveryWaitPeriod);
int numberNotReplayed;
do
{
numberNotReplayed = 0;
using(this.deliveredMessagesLock.Lock())
{
if (previouslyDeliveredMessages != null)
{
foreach(KeyValuePair<MessageId, bool> entry in previouslyDeliveredMessages)
{
if (!entry.Value)
{
numberNotReplayed++;
}
}
}
}
if (numberNotReplayed > 0)
{
Tracer.InfoFormat("Consumer[{0}] waiting for redelivery of {1} in transaction: {2}",
ConsumerId, numberNotReplayed, previouslyDeliveredMessages.TransactionId);
Thread.Sleep((int) Math.Max(500, failoverRedeliveryWaitPeriod/4));
}
}
while (numberNotReplayed > 0 && expiry > DateTime.Now);
}
}