[ https://issues.apache.org/activemq/browse/AMQ-865?page=comments#action_36801 ] james strachan commented on AMQ-865: ------------------------------------
Here's another test case which seems to show a similar issue... http://www.nabble.com/Durable-topic-subscription-needs-pump-primed.-tf2117517.html#a5852831 using System; using System.Collections.Generic; using System.Text; using NUnit.Framework; using NUnit.Extensions; using ActiveMQ; using NMS; using ActiveMQ.Commands; using System.Threading; namespace ActiveMQDurableTest { [TestFixture] public class DurableTest { private static string TOPIC = "TestTopic"; private static String URI = "tcp://localhost:61616"; private static String CLIENT_ID = "DurableClientId"; private static String CONSUMER_ID = "ConsumerId"; private static ConnectionFactory FACTORY = new ConnectionFactory(new Uri(URI)); private int count = 0; public void RegisterDurableConsumer() { using (IConnection connection = FACTORY.CreateConnection()) { connection.ClientId = CLIENT_ID; connection.Start(); using (ISession session = connection.CreateSession(AcknowledgementMode.DupsOkAcknowledge)) { ITopic topic = session.GetTopic(TOPIC); IMessageConsumer consumer = session.CreateDurableConsumer(topic, CONSUMER_ID, "2 > 1", false); consumer.Dispose(); } connection.Stop(); } } public void SendPersistentMessage() { using (IConnection connection = FACTORY.CreateConnection()) { connection.Start(); using (ISession session = connection.CreateSession(AcknowledgementMode.DupsOkAcknowledge)) { ITopic topic = session.GetTopic(TOPIC); ActiveMQTextMessage message = new ActiveMQTextMessage("Hello"); message.NMSPersistent = true; message.Persistent = true; IMessageProducer producer = session.CreateProducer(); producer.Send(topic, message); producer.Dispose(); } connection.Stop(); } } [Test] public void TestMe() { count = 0; RegisterDurableConsumer(); SendPersistentMessage(); using (IConnection connection = FACTORY.CreateConnection()) { connection.ClientId = CLIENT_ID; connection.Start(); using (ISession session = connection.CreateSession(AcknowledgementMode.DupsOkAcknowledge)) { ITopic topic = session.GetTopic(TOPIC); IMessageConsumer consumer = session.CreateDurableConsumer(topic, CONSUMER_ID, "2 > 1", false); consumer.Listener += new MessageListener(consumer_Listener); /// Don't know how else to give the system enough time. /// Thread.Sleep(5000); Assert.AreEqual(0, count); Console.WriteLine("Count = " + count); SendPersistentMessage(); Thread.Sleep(5000); Assert.AreEqual(2, count); Console.WriteLine("Count = " + count); consumer.Dispose(); } connection.Stop(); } } /// <summary> /// /// </summary> /// <param name="message"></param> private void consumer_Listener(IMessage message) { ++count; - Hide quoted text - } } } > C# Client's Listener doesn't receive messages if you don't explicitly call > Subscribe > ------------------------------------------------------------------------------------ > > Key: AMQ-865 > URL: https://issues.apache.org/activemq/browse/AMQ-865 > Project: ActiveMQ > Issue Type: Bug > Components: NMS (C# client) > Environment: Windows XP, VS 2005, ActiveMQ 4.0.1 > Reporter: Denis Abramov > > Easiest way to reproduce the bug would be to start the consumer using the > following code and then AFTER the consumer starts, start some producer > (either java or C#) and you will notice that the consumer will not get any > messages (through trial and error I found that calling Receive() on the > consumer at least once will make you lose a message but the listener will > kick back in): > using System; > using ActiveMQ; > using ActiveMQ.Commands; > using NMS; > namespace JMSClient > { > /// <summary> > /// Summary description for Class1. > /// </summary> > class Class1 > { > /// <summary> > /// The main entry point for the application. > /// </summary> > [STAThread] > static void Main(string[] args) > { > IConnectionFactory factory = new ConnectionFactory(new > Uri("tcp://localhost:61616?jms.useAsyncSend=true")); > using (IConnection connection = factory.CreateConnection()) > { > Console.WriteLine("Created a connection!"); > ISession session = connection.CreateSession(); > IDestination destination = > session.GetQueue("EXCEL.TESTQUEUE"); > Console.WriteLine("Using destination: " + destination); > // lets create a consumer and producer > IMessageConsumer consumer = > session.CreateConsumer(destination); > consumer.Listener += new MessageListener(consumer_Listener); > while (true); > } > } > static void consumer_Listener(IMessage message) > { > if (message == null) > { > Console.WriteLine("No message received!"); > } > else > { > Console.WriteLine("Received message with text: " + > ((ActiveMQTextMessage)message).Text); > } > } > } > } -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: https://issues.apache.org/activemq/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira