activemq-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "james strachan (JIRA)" <j...@apache.org>
Subject [jira] Commented: (AMQ-865) C# Client's Listener doesn't receive messages if you don't explicitly call Subscribe
Date Thu, 17 Aug 2006 15:39:23 GMT
    [ 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

        

Mime
View raw message