kernelsky 发表于 2015-8-6 08:27:41

Apache ActiveMQ

  1.JMS:http://www.iyunv.com/phoebus0501/archive/2011/02/23/1961970.html
  2.以下代码来自ActiveMQ中的例子,只是加了一些说明,方便理解
  消息消费者:



private void consumer()
{
String user = "con_user"; //用户名
String password = "con_password"; //密码               
String host = "localhost"; //MQ服务器的IP地址
int port = Int32.Parse("61616"); //61616:openwire协议使用的端口号
String destination = "HIATMP.HISENSE.VMS.NEWVMSPUB"; //主题的名称或者队列的名称               
String brokerUri = "activemq:tcp://" + host + ":" + port + "?transport.useLogging=true";
//JMS接口规范
//1.连接工厂:用于创建连接
NMSConnectionFactory factory = new NMSConnectionFactory(brokerUri);
//2.JMS客户端到JMS Provider的连接
IConnection connection = factory.CreateConnection(user, password);//也可以没有用户名、密码
//通过在MQ服务器上设置用户名、密码控制对MQ服务器的访问
//3.线程
ISession session = connection.CreateSession(AcknowledgementMode.AutoAcknowledge);
//4.消息的目的地:destination
IDestination dest = session.GetTopic(destination);//Topic模式
//5.创建用于接收消息的对象
IMessageConsumer consumer = session.CreateConsumer(dest);
connection.Start();//建立连接
listBox1.Items.Add("---成功连接MQ服务器---");
while(true)
{
listBox1.Items.Add("正在等待消息....");
IMessage msg = consumer.Receive();//阻塞等待
if (msg is ITextMessage)
{
ITextMessage txtMsg = msg as ITextMessage;
String body = txtMsg.Text;//取出消息的内容   
listBox1.Items.Add("    收到消息:消息内容:"+body+"--等待5秒");
Thread.Sleep(5000);//模拟处理消息所花费的时间
//Topic模式与Queue模式的区别:
//在Topic模式下,必须先启动消费者,再由生产者通过topic给消费者发送消息。若先给topic发消息,再启动消费者,消息丢失。
//在本程序中,尽管延迟了5秒取下一个消息,但消息仍在。Topic会确保所有订阅者都取到消息后,才会将消息删除。
//在本程序中,尽管Topic中有多个消息,但还是一次只取回一条消息。
                }
}
}
  消息生产者:



public static void producer(string body)//body表示要发送的字符串内容
      {
String user ="admin";
String password = "password";
String host = "localhost"; //MQ服务器的IP地址
int port = Int32.Parse("61616"); //61616:openwire协议使用的端口号
String destination = "HIATMP.HISENSE.VMS.NEWVMSPUB"; //主题的名称或者队列的名称
String brokerUri = "activemq:tcp://" + host + ":" + port;
//JMS接口规范
//1.连接工厂:用于创建连接
NMSConnectionFactory factory = new NMSConnectionFactory(brokerUri);
//2.JMS客户端到JMS Provider的连接
IConnection connection = factory.CreateConnection(user, password);
//3.线程:同时设置是否支持事务和acknowledge标识
ISession session = connection.CreateSession(AcknowledgementMode.AutoAcknowledge);
//4.消息的目的地:destination
IDestination dest = session.GetTopic(destination);//Topic模式
//5.创建用于发送消息的对象(设置其持久模式)
IMessageProducer producer = session.CreateProducer(dest);
producer.DeliveryMode = MsgDeliveryMode.NonPersistent;//非持久模式

connection.Start();//建立连接
producer.Send(session.CreateTextMessage(body));//body表示要发送的字符串内容
//JMS定义了5中消息正文格式,此处的TextMessage表示一个字符串对象
connection.Close();//关闭连接
}
  3.网站链接:http://activemq.apache.org/
  4.相关书籍:《activemq in action》
  5.为了使用C#,需要添加:using Apache.NMS;添加引用Apache.NMS.dll;Apache.NMS.ActiveMQ;Ionic.Zlib.dll;
  注意:以上DLL文件的版本号与.NET架构的版本号要统一。
页: [1]
查看完整版本: Apache ActiveMQ