activemq-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "David Holroyd (JIRA)" <j...@apache.org>
Subject [jira] Issue Comment Edited: (AMQNET-64) occasional exception in ActiveMQ.Dispatcher.Dequeue() : millisecondsTimeout must be either non-negative and less than or equal to Int32.MaxValue or -1.
Date Sun, 23 Sep 2007 19:25:22 GMT

    [ https://issues.apache.org/activemq/browse/AMQNET-64?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_40168
] 

dholroyd edited comment on AMQNET-64 at 9/23/07 12:23 PM:
---------------------------------------------------------------

The following is probably superior to my previous attempt,

{noformat}
--- src/main/csharp/ActiveMQ/Dispatcher.cs      (revision 578465)
+++ src/main/csharp/ActiveMQ/Dispatcher.cs      (working copy)
@@ -127,7 +129,7 @@
 
             while (!bClosed && rc == null)
             {
-                if( !messageReceivedEventHandle.WaitOne((int)timeout.TotalMilliseconds, false)
)
+                if( !messageReceivedEventHandle.WaitOne(timeout, false));
                 {
                     break;
                 }
@@ -145,7 +147,7 @@
         /// </summary>
         public IMessage Dequeue()
         {
-                       return Dequeue(TimeSpan.MaxValue);
+                       return Dequeue(new TimeSpan(-1));
         }
 
                internal void Close()
{noformat}

(as WaitOne() can take a TimeSpan argument directly.)

I'm still trying to work out why the WaitOne() call just seems to return {{false}} more-or-less
immediately..

      was (Author: dholroyd):
    The following is probably superior to my previous attempt,

{noformat}
--- src/main/csharp/ActiveMQ/Dispatcher.cs      (revision 578465)
+++ src/main/csharp/ActiveMQ/Dispatcher.cs      (working copy)
@@ -89,11 +89,13 @@
         /// </summary>
         public void Enqueue(ActiveMQMessage message)
         {
+Console.WriteLine("Enqueue() called");
             lock (semaphore)
             {
                 queue.Enqueue(message);
                 messageReceivedEventHandle.Set();
             }
+Console.WriteLine("Enqueue() done");
         }
         
         /// <summary>
@@ -127,7 +129,7 @@
 
             while (!bClosed && rc == null)
             {
-                if( !messageReceivedEventHandle.WaitOne((int)timeout.TotalMilliseconds, false)
)
+                if( !messageReceivedEventHandle.WaitOne(timeout, false));
                 {
                     break;
                 }
@@ -145,7 +147,7 @@
         /// </summary>
         public IMessage Dequeue()
         {
-                       return Dequeue(TimeSpan.MaxValue);
+                       return Dequeue(new TimeSpan(-1));
         }
 
                internal void Close()
{noformat}

(as WaitOne() can take a TimeSpan argument directly.)

I'm still trying to work out why the WaitOne() call just seems to return {{false}} more-or-less
immediately..
  
> occasional exception in ActiveMQ.Dispatcher.Dequeue() : millisecondsTimeout must be either
non-negative and less than or equal to Int32.MaxValue or -1.
> -------------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: AMQNET-64
>                 URL: https://issues.apache.org/activemq/browse/AMQNET-64
>             Project: ActiveMQ .Net
>          Issue Type: Bug
>          Components: ActiveMQ Client
>         Environment: .NET 2.0, Windows 2000 Server under VMware, https://svn.apache.org/repos/asf/activemq/activemq-dotnet/trunk
@ 578465
>            Reporter: David Holroyd
>            Assignee: James Strachan
>
> I tried a lightly modified version of the example code from http://activemq.apache.org/nms/nms.html
and find that every few invocations of the test program, I see the following exception, rather
than the normal 'Received message' output:
> {noformat}
> Unhandled Exception: System.ArgumentOutOfRangeException: Number must be either non-negative
and less than or equal to Int32.MaxValue or -1.
> Parameter name: millisecondsTimeout
>    at System.Threading.WaitHandle.WaitOne(Int32 millisecondsTimeout, Boolean exitContext)
>    at ActiveMQ.Dispatcher.Dequeue(TimeSpan timeout)
>    at ActiveMQ.Dispatcher.Dequeue()
>    at ActiveMQ.MessageConsumer.Receive()
>    at Test.Bridge.Main(String[] args)
> {noformat}
> The code in question is,
> {code:title=Bridge.cs}
> namespace Test {
> 	using System;
> 	using NMS;
> 	using ActiveMQ;
> 	public class Bridge {
> 		public static void Main(string[] args) {
> 			IConnectionFactory factory = new ConnectionFactory(new Uri("tcp://192.168.9.162:61616"));
> 			using (IConnection connection = factory.CreateConnection())
> 			{
> 			    Console.WriteLine("Created a connection!");
> 			    
> 			    ISession session = connection.CreateSession();
> 			    
> 			    IDestination destination = session.GetQueue("FOO.BAR");
> 			    Console.WriteLine("Using destination: " + destination);
> 			    
> 			    // lets create a consumer and producer
> 			    IMessageConsumer consumer = session.CreateConsumer(destination);
> 			    
> 			    IMessageProducer producer = session.CreateProducer(destination);
> 			    producer.Persistent = true;
> 			    
> 			    // lets send a message
> 			    ITextMessage request = session.CreateTextMessage("Hello World!");
> 			    request.NMSCorrelationID = "abc";
> 			    request.Properties["NMSXGroupID"] = "cheese";
> 			    request.Properties["myHeader"] = "James";
> 			    
> 			    producer.Send(request);
> 			    
> 			    // lets consume a message
> 			    ITextMessage message = (ITextMessage) consumer.Receive();
> 			    if (message == null)
> 			    {
> 				Console.WriteLine("No message received!");
> 			    }
> 			    else
> 			    {
> 				Console.WriteLine("Received message with ID:   " + message.NMSMessageId);
> 				Console.WriteLine("Received message with text: " + message.Text);
> 			    }
> 			}
> 		}
> 	}
> }
> {code}
> The C# code is talking to ActiveMQ 4.1.1 running on the Linux host (I'm using NMS within
VMware).
> I'll try to nose around the code and work out what's happening, but this is the first
time I've ever worked with C#.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message