activemq-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Vadim Chekan" <kot.bege...@gmail.com>
Subject Re: Slow performance of NMS api compared to Java
Date Thu, 28 Aug 2008 06:26:56 GMT
Would it be property of connection or transport?
I thought connection means JMS connection and it has nothing to do with TCP.

Vadim.

On Wed, Aug 27, 2008 at 10:33 PM, Jim Gomes <e.semog@gmail.com> wrote:
> Since I couldn't look at your code because of the license grant issue,
> I looked in to what you had mentioned about the NoDelay option.  I
> took a stab at adding support for turning this (and several other
> socket transport options) on and off from the connection URI.  Once
> you fix the license grant, I can look at your patch and integrate it
> in with my changes.
>
> The solution I am playing with would look like this:
>
> activemq:tcp://localhost:61616?connection.NoDelay=true
>
> This would turn off the Nagle algorithm on the socket connection.
>
> Thanks!
> -Jim
>
>
>
> On 8/27/08, Jim Gomes <e.semog@gmail.com> wrote:
>> Hi Stefan,
>>
>> Thanks for creating Jira AMQNET-109 and attaching the patch.  However,
>> the Grant ASF License option was not checked.  Would you re-attach the
>> patch and check that option?  I can then look at integrating it into
>> the codebase.
>>
>> Thanks!
>> -Jim
>>
>>
>>
>> On 8/26/08, Stefan Gmeiner <stefan.gmeiner@pup.ch> wrote:
>>> We are evaluating the NMS-API to connect a C# app to our ActiveMQ
>>> broker. For this we wrote a simple client which sends a request and
>>> waits for a reply (Client --> Broker --> Server --> Broker --> Client).
>>> The client/server C#-app runs in a single process with two different
>>> connections to the broker which resides on a different pc on the network.
>>>
>>> This scenario takes about 200ms for each message transfered by the
>>> C#-API and less than 20ms by the Java-API although both do the same thing.
>>>
>>> Does anybody have an idea what is going wrong or why there is such a big
>>> time differences?
>>>
>>> Thank you for helping
>>> Stefan
>>>
>>>
>>> Code for the C# test app follows:
>>> ==========================================
>>> using System;
>>> using Apache.NMS;
>>>
>>> namespace Test
>>> {
>>>      class SimpleTest
>>>      {
>>>              private static readonly String URI = "tcp://broker:61616";
>>>              private static readonly String REQUEST_QUEUE = "test.request";
>>>
>>>              private static DateTime startOffset;
>>>
>>>              public static void Main()
>>>              {
>>>                      IConnectionFactory factory = new NMSConnectionFactory(URI);
>>>
>>>                      SetUpReceiver(factory);
>>>                      SetUpSender(factory);
>>>
>>>                      Console.WriteLine("Press any key to quit.");
>>>                      Console.ReadKey();
>>>              }
>>>
>>>
>>>              private static void SetUpReceiver(IConnectionFactory factory)
>>>              {
>>>                      // set up receiver
>>>                      IConnection rConnection = factory.CreateConnection();
>>>                      ISession rSession = rConnection.CreateSession();
>>>                      IMessageConsumer rConsumer =
>>> rSession.CreateConsumer(rSession.GetQueue(REQUEST_QUEUE));
>>>                      IMessageProducer rProducer = rSession.CreateProducer();
>>>                      rConsumer.Listener += delegate(IMessage message)
>>>                      {
>>>                              OnMessage(rSession, rProducer, message);
>>>                      };
>>>                      rConnection.Start();
>>>              }
>>>
>>>              private static void SetUpSender(IConnectionFactory factory)
>>>              {
>>>                      IConnection sConnection = factory.CreateConnection();
>>>                      ISession sSession = sConnection.CreateSession();
>>>                      IMessageProducer sProducer =
>>> sSession.CreateProducer(sSession.GetQueue(REQUEST_QUEUE));
>>>                      IDestination replyDestination = sSession.CreateTemporaryQueue();
>>>                      IMessageConsumer sConsumer = sSession.CreateConsumer(replyDestination);
>>>                      sConnection.Start();
>>>
>>>                      for (int i = 0; i < 5; i++)
>>>                      {
>>>                              Console.WriteLine("Test " + i);
>>>
>>>                              // send message and wait for reply
>>>                              IMessage requestMsg = sSession.CreateTextMessage("Request"
+ i);
>>>                              requestMsg.NMSReplyTo = replyDestination;
>>>
>>>                              startOffset = DateTime.Now;
>>>
>>>                              sProducer.Send(requestMsg, false, NMSConstants.defaultPriority,
>>> NMSConstants.defaultTimeToLive);
>>>
>>>                              WriteTimedMessage("Request message sent");
>>>
>>>                              IMessage replyMsg = sConsumer.Receive();
>>>
>>>                              WriteTimedMessage("Reply message received");
>>>                      }
>>>              }
>>>
>>>              private static void OnMessage(ISession session, IMessageProducer
>>> producer, IMessage message)
>>>              {
>>>                      WriteTimedMessage("Request message received");
>>>
>>>                      IMessage replyMsg = session.CreateTextMessage("Reply");
>>>                      producer.Send(message.NMSReplyTo, replyMsg, false,
>>> NMSConstants.defaultPriority, NMSConstants.defaultTimeToLive);
>>>
>>>                      WriteTimedMessage("Reply message sent");
>>>              }
>>>
>>>
>>>              private static void WriteTimedMessage(String message)
>>>              {
>>>                      lock (typeof(SimpleTest))
>>>                      {
>>>                              TimeSpan diff = DateTime.Now - startOffset;
>>>                              Console.WriteLine("{0} ms: {1}", diff.TotalMilliseconds,
message);
>>>                      }
>>>              }
>>>      }
>>> }
>>>
>>>
>>>
>>>
>>
>



-- 
>From RFC 2631: In ASN.1, EXPLICIT tagging is implicit unless IMPLICIT
is explicitly specified

Mime
View raw message