public void TestNornalRedeliveryPolicyDelaysDeliveryOnRollback()
{
using(Connection connection = (Connection) CreateConnection())
{
IRedeliveryPolicy policy = connection.RedeliveryPolicy;
policy.InitialRedeliveryDelay = 500;
policy.UseExponentialBackOff = false;
connection.Start();
ISession session = connection.CreateSession(AcknowledgementMode.Transactional);
IDestination destination = session.CreateTemporaryQueue();
IMessageProducer producer = session.CreateProducer(destination);
IMessageConsumer consumer = session.CreateConsumer(destination);
// Send the messages
producer.Send(session.CreateTextMessage("1st"));
producer.Send(session.CreateTextMessage("2nd"));
session.Commit();
ITextMessage m;
m = (ITextMessage)consumer.Receive(TimeSpan.FromMilliseconds(1000));
Assert.IsNotNull(m);
Assert.AreEqual("1st", m.Text);
session.Rollback();
// No delay on first Rollback..
m = (ITextMessage)consumer.Receive(TimeSpan.FromMilliseconds(100));
Assert.IsNotNull(m);
session.Rollback();
// Show subsequent re-delivery delay is incrementing.
m = (ITextMessage)consumer.Receive(TimeSpan.FromMilliseconds(100));
Assert.IsNull(m);
m = (ITextMessage)consumer.Receive(TimeSpan.FromMilliseconds(700));
Assert.IsNotNull(m);
Assert.AreEqual("1st", m.Text);
session.Rollback();
// The message gets redelivered after 500 ms every time since
// we are not using exponential backoff.
m = (ITextMessage)consumer.Receive(TimeSpan.FromMilliseconds(100));
Assert.IsNull(m);
m = (ITextMessage)consumer.Receive(TimeSpan.FromMilliseconds(700));
Assert.IsNotNull(m);
Assert.AreEqual("1st", m.Text);
}
}