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.
|