activemq-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From AFinnell <and...@activesol.net>
Subject Re: Durable topic subscription needs pump primed.
Date Thu, 17 Aug 2006 14:58:51 GMT

Notice that count is 0 when the consumer is created again, once another
message is sent, all of a sudden two messages are received.

This NUnit verifies what I said, not what should happen. 

------

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;
        }
	}
}


James.Strachan wrote:
> 
> Which version of ActiveMQ are you using BTW?
> Any chance you could refactor your test code into an NUnit test case?
> 
> On 8/16/06, AFinnell <andrew@activesol.net> wrote:
>>
>> I'm using the NMS client for C# and it appears that the durable messages
>> need
>> something to prime the pump.
>>
>> Steps to reproduce:
>>
>> Note: I am using the Listener handler on the IMessageConsumer object for
>> an
>> asynch response.
>>
>> 1. Sign on with durable topic subscription
>> 2. Disconnect client
>> 3. Send a persistent message
>> 4. Sign back on to durable topic subscription
>> (At this point the message is not sent to the client)
>> 5. Send a new message to the client
>> 6. Both messages are now received.
>>
>> I can post my code as needed. Is the problem I'm having apparent to
>> anyone?
>>
>> Andrew
>> --
>> View this message in context:
>> http://www.nabble.com/Durable-topic-subscription-needs-pump-primed.-tf2117517.html#a5839659
>> Sent from the ActiveMQ - User forum at Nabble.com.
>>
>>
> 
> 
> -- 
> 
> James
> -------
> http://radio.weblogs.com/0112098/
> 
> 

-- 
View this message in context: http://www.nabble.com/Durable-topic-subscription-needs-pump-primed.-tf2117517.html#a5852831
Sent from the ActiveMQ - User forum at Nabble.com.


Mime
View raw message