NMS: Consuming ActiveMQ messages Asynchronously
There are some articles around which demonstrate how to implement async message consumer in C# but they employ Spring Framework. In my opinion it is not justified on many accounts. Spring may be good for your project or may be not.
So here we go:
using System;
using Apache.NMS;
using Apache.NMS.ActiveMQ;
namespace NMSTestConsole
{
class MainClass
{
public static void Main(string[] args)
{
using(IConnection conn = new ConnectionFactory("tcp://localhost:61616").CreateConnection())
{
conn.Start();
ISession session = conn.CreateSession();
IQueue queue = session.GetQueue("aaa");
IMessageProducer producer = session.CreateProducer(queue);
IMessageConsumer consumer3 = session.CreateConsumer(session.GetQueue("aaa"));
consumer3.Listener += delegate(IMessage m) {Console.WriteLine("aaa: \n{0}",m);};
producer.Send(producer.CreateTextMessage("a test"));
Console.WriteLine("Press any key...");
Console.ReadKey();
}
}
}
}
Look ma, no Spring!
Please pay attention to conn.Start() call. Without it your consumers will remain in synchronous mode and will not serve messages to their listeners.
But if you do not assign a listener to your consumer then you still can do it synchronous way: "Console.WriteLine(consumer3.Receive());" and connection can remain in asynchronous mode.
No comments:
Post a Comment