Author: tabish
Date: Wed Nov 25 16:54:33 2009
New Revision: 884195
URL: http://svn.apache.org/viewvc?rev=884195&view=rev
Log:
https://issues.apache.org/activemq/browse/AMQNET-214
Fix the individual ack callback so that it searches the entire list of
dispatched messages for the one to ack. Adds the users test case to the
Individual Ack tests.
Modified:
activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/src/main/csharp/MessageConsumer.cs
activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/src/test/csharp/IndividualAckTest.cs
Modified:
activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/src/main/csharp/MessageConsumer.cs
URL:
http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/src/main/csharp/MessageConsumer.cs?rev=884195&r1=884194&r2=884195&view=diff
==============================================================================
---
activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/src/main/csharp/MessageConsumer.cs
(original)
+++
activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/src/main/csharp/MessageConsumer.cs
Wed Nov 25 16:54:33 2009
@@ -341,10 +341,14 @@
this.dispatchedMessages.Remove(originalDispatch);
break;
}
-
- return;
}
}
+
+ if(dispatch == null)
+ {
+ Tracer.DebugFormat("Attempt to Ack
MessageId[{0}] failed because the original dispatch is not in the Dispatch
List", message.MessageId);
+ return;
+ }
MessageAck ack = new MessageAck();
@@ -354,6 +358,7 @@
ack.LastMessageId = dispatch.Message.MessageId;
ack.MessageCount = 1;
+ Tracer.Debug("Sending Individual Ack for MessageId: " +
ack.LastMessageId.ToString());
this.session.Connection.Oneway(ack);
}
Modified:
activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/src/test/csharp/IndividualAckTest.cs
URL:
http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/src/test/csharp/IndividualAckTest.cs?rev=884195&r1=884194&r2=884195&view=diff
==============================================================================
---
activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/src/test/csharp/IndividualAckTest.cs
(original)
+++
activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/src/test/csharp/IndividualAckTest.cs
Wed Nov 25 16:54:33 2009
@@ -139,5 +139,49 @@
session.Close();
}
+ [Test]
+ public void
TestIndividualAcknowledgeMultiMessages_AcknowledgeFirstTest()
+ {
+ ISession session =
connection.CreateSession(AcknowledgementMode.IndividualAcknowledge);
+
+ // Push 2 messages to queue
+ ITemporaryQueue queue = session.CreateTemporaryQueue();
+ IMessageProducer producer = session.CreateProducer(queue);
+
+ ITextMessage msg = session.CreateTextMessage("test 1");
+ producer.Send(msg, MsgDeliveryMode.Persistent, MsgPriority.Normal,
TimeSpan.MinValue);
+ msg = session.CreateTextMessage("test 2");
+ producer.Send(msg, MsgDeliveryMode.Persistent, MsgPriority.Normal,
TimeSpan.MinValue);
+ producer.Close();
+
+ IMessageConsumer consumer = session.CreateConsumer(queue);
+
+ // Read the first message
+ ITextMessage fetchedMessage1 = (ITextMessage)
consumer.Receive(TimeSpan.FromMilliseconds(2000));
+ Assert.IsNotNull(fetchedMessage1);
+ Assert.AreEqual("test 1", fetchedMessage1.Text);
+
+ // Read the second message
+ ITextMessage fetchedMessage2 = (ITextMessage)
consumer.Receive(TimeSpan.FromMilliseconds(2000));
+ Assert.IsNotNull(fetchedMessage2);
+ Assert.AreEqual("test 2", fetchedMessage2.Text);
+
+ // Acknowledge first message
+ fetchedMessage1.Acknowledge();
+
+ consumer.Close();
+
+ // Read first message a second time
+ consumer = session.CreateConsumer(queue);
+ fetchedMessage1 = (ITextMessage)
consumer.Receive(TimeSpan.FromMilliseconds(2000));
+ Assert.IsNotNull(fetchedMessage1);
+ Assert.AreEqual("test 2", fetchedMessage1.Text);
+
+ // Try to read second message a second time
+ fetchedMessage2 = (ITextMessage)
consumer.Receive(TimeSpan.FromMilliseconds(2000));
+ Assert.IsNull(fetchedMessage2);
+ consumer.Close();
+ }
+
}
}