I had similar results as yours when performance testing NMS. You may want evaluate IKVM for C# integration. Using IKVM, I had 4 times the message throughput than NMS. Also, the converted jar -> dll gives you access to the full JMS API for your C# producers and consumers.
Stefan Gmeiner 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); > } > } > } > } > > > > > -- View this message in context: http://www.nabble.com/Slow-performance-of-NMS-api-compared-to-Java-tp19158553p19184345.html Sent from the ActiveMQ - User mailing list archive at Nabble.com.