public void TestTransactedProduceConsumeRollbackConsume(
[Values("tcp://${activemqhost}:61616")]
string baseConnectionURI)
{
INetTxConnectionFactory factory = new NetTxConnectionFactory(NMSTestSupport.ReplaceEnvVar(baseConnectionURI));
using(INetTxConnection connection = factory.CreateNetTxConnection())
{
connection.Start();
using(INetTxSession session = connection.CreateNetTxSession())
{
IDestination destination = session.CreateTemporaryQueue();
using(IMessageProducer producer = session.CreateProducer(destination))
{
using(TransactionScope scoped = new TransactionScope(TransactionScopeOption.RequiresNew))
{
Assert.IsNotNull(Transaction.Current);
for(int i = 0; i < MSG_COUNT; ++i)
{
producer.Send(session.CreateTextMessage("Hello World"));
}
scoped.Complete();
}
}
using(IMessageConsumer consumer = session.CreateConsumer(destination))
{
Thread.Sleep(200);
using(TransactionScope scoped = new TransactionScope(TransactionScopeOption.RequiresNew))
{
for(int i = 0; i < MSG_COUNT; ++i)
{
IMessage msg = consumer.Receive(TimeSpan.FromMilliseconds(2000));
Assert.IsNotNull(msg, "Message was null for index: " + i);
}
}
using(TransactionScope scoped = new TransactionScope(TransactionScopeOption.RequiresNew))
{
for(int i = 0; i < MSG_COUNT; ++i)
{
IMessage msg = consumer.Receive(TimeSpan.FromMilliseconds(2000));
Assert.IsNotNull(msg, "Message was null for index: " + i);
}
}
}
using(IMessageConsumer consumer = session.CreateConsumer(destination))
{
Thread.Sleep(200);
using(TransactionScope scoped = new TransactionScope(TransactionScopeOption.RequiresNew))
{
for(int i = 0; i < MSG_COUNT; ++i)
{
IMessage msg = consumer.Receive(TimeSpan.FromMilliseconds(2000));
Assert.IsNotNull(msg, "Message was null for index: " + i);
Assert.IsTrue(msg.NMSRedelivered);
}
scoped.Complete();
}
}
session.Close();
}
connection.Close();
}
}