文章出处:http://www.cnblogs.com/chengxc/p/ActiveMQ.html
刚来到一个新公司,因为项目需要,要使用ActiveMQ,于是就研究了一下,写下此篇笔记,借鉴了博客园和CSDN的相关资料
面向消息的中间件(Message-Oriented Middleware)MOM
对象请求代理(Object Request Brokers)ORB
1 class Program 2 { 3 static void Main(string[] args) 4 { 5 try 6 { 7 //创建连接工厂 8 IConnectionFactory factory = new ConnectionFactory("tcp://localhost:61616/"); 9 using (IConnection connection = factory.CreateConnection()) 10 { 11 //创建 Session 12 using (ISession session = connection.CreateSession()) 13 { 14 //创建生产者Producer for the topic/queue 15 IMessageProducer prod = session.CreateProducer( 16 new Apache.NMS.ActiveMQ.Commands.ActiveMQTopic("testing")); 17 //发送消息 18 int i = 0; 19 20 while (!Console.KeyAvailable) 21 { 22 ITextMessage msg = prod.CreateTextMessage(); 23 msg.Text = i.ToString(); 24 Console.WriteLine("Sending: " + i.ToString()); 25 prod.Send(msg, Apache.NMS.MsgDeliveryMode.NonPersistent, Apache.NMS.MsgPriority.Normal, TimeSpan.MinValue); 26 27 System.Threading.Thread.Sleep(5000); 28 i++; 29 } 30 } 31 } 32 33 Console.ReadLine(); 34 } 35 catch (System.Exception e) 36 { 37 Console.WriteLine("{0}",e.Message); 38 Console.ReadLine(); 39 } 40 } 41 }
1 class Program 2 { 3 static void Main(string[] args) 4 { 5 try 6 { 7 //创建连接工厂 8 IConnectionFactory factory = new ConnectionFactory("tcp://localhost:61616/"); 9 //创建连接 10 using (IConnection connection = factory.CreateConnection()) 11 { 12 connection.ClientId = "testing listener"; 13 connection.Start(); 14 //创建Session 15 using (ISession session = connection.CreateSession()) 16 { 17 //创建Consumer 18 IMessageConsumer consumer = session.CreateDurableConsumer(new Apache.NMS.ActiveMQ.Commands.ActiveMQTopic("testing"), "testing listener", null, false); 19 //绑定接收消息的事件 20 consumer.Listener += new MessageListener(consumer_Listener); 21 Console.ReadLine(); 22 } 23 connection.Stop(); 24 connection.Close(); 25 } 26 } 27 catch (System.Exception e) 28 { 29 Console.WriteLine(e.Message); 30 } 31 } 32 33 static void consumer_Listener(IMessage message) 34 { 35 try 36 { 37 ITextMessage msg = (ITextMessage)message; 38 Console.WriteLine("Receive: " + msg.Text); 39 } 40 catch (System.Exception e) 41 { 42 Console.WriteLine(e.Message); 43 } 44 } 45 }
相关参数说明
连接工厂是客户用来创建连接的对象。
IConnection 封装了客户与服务之间一个虚拟的连接。
Session是生产和消费消息的一个单线程上下文。会话用于创建消息生产者(producer)、消息消费者(consumer)和消息 (message)等。会话提供了一个事务性的上下文,在这个上下文中,一组发送和接收被组合到了一个原子操作中。
目的地是客户用来指定它生产的消息的目标和它消费的消息的来源的对象。定义了两种消息传递域:点对点(PTP)消息传递域和发布/订阅消息传递域。
在点对点消息传递域中,目的地被成为队列(queue);在发布/订阅消息传递域中,目的地被成为主题(topic)。
消息生产者是由会话创建的一个对象,用于把消息发送到一个目的地。
消息消费者是由会话创建的一个对象,它用于接收发送到目的地的消息。消息的消费可以采用以下两种方法之一:
同步消费。通过调用消费者的receive方法从目的地中显式提取消息。receive方法可以一直阻塞到消息到达。
异步消费。客户可以为消费者注册一个消息监听器,以定义在消息到达时所采取的动作。
* (7)消息 ITextMessage