activemq-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "James Strachan" <james.strac...@gmail.com>
Subject Re: Durable topic subscription needs pump primed.
Date Thu, 17 Aug 2006 15:41:16 GMT
This is sounding a bit like this issue...

https://issues.apache.org/activemq/browse/AMQ-865

thanks for the test case, have added it to that issue. We'll take a look.

On 8/17/06, AFinnell <andrew@activesol.net> wrote:
>
> 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.
>
>


-- 

James
-------
http://radio.weblogs.com/0112098/

Mime
View raw message