• ActiveMQ初体验(转)


    转载地址:http://www.cnblogs.com/diorlv/p/3328712.html 做了修改

    首先介绍下MQ,MQ英文名MessageQueue,中文名也就是大家用的消息队列,干嘛用的呢,说白了就是一个消息的接受和转发的容器,可用于消息推送。

    下面介绍主题,就是今天为大家介绍的ActiveMQ:

    他是Apache出品的一个开源的消息队列软件,运行在JVM下,支持多种语言,如JAVA,C++,C#。

    现在先为大家介绍下如何配置ActiveMQ的服务器端:

    1、当然是下载软件了

    去官方网站下载:http://activemq.apache.org/ 我下载的是apache-activemq-5.8.0-bin 5.8版本,当然开源的也是支持下载source的,需要自己编译下,这里不做过多介绍

    2、解压后,进入apache-activemq-5.8.0inwin32启动activemq.bat。系统会自动执行启动过程,当然一般安装失败的情况是没有装JVM环境,启动成功应该是这样

    3、打开浏览器输入http://localhost:8161/admin/;用户名和密码默认是admin,admin默认配置是这个,当然你也可以更改这个配置

    4、至此,服务端启动完毕

    —————————————————————————————————完美分割———————————————————————————————————

    现在就是今天的主题了,怎样在C#中使用ActiveMQ提供的API实现消息的订阅和发布

    1、首先需要下载ActiveMQ提供的API函数,这个也从官网下

    http://activemq.apache.org/nms/nms-api-downloads.html Apache.NMS-1.6.0-bin和Apache.NMS.ActiveMQ-1.6.0-bin 这两个dll都在下载后文件夹的bin目录下;

    ,也可以直接从NuGet包中搜索

    2、将这两个文件在项目中引用;

    3、在ActiveMQ中,有两个概念,一个是生产者(Producer),另一个是消费者(Consumer),生产者就是我们常说的发布者,而消费者,就是订阅者,这样解释可能更好理解一下吧,如果知道发布订阅模式的话,不知道的话,字面意思也很好理解,发布者就是发布消息的,而订阅者通过订阅事件,将消息接收到;

    5、Product

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using Apache.NMS;
    using Apache.NMS.ActiveMQ;
    
    namespace MqProducer
    {
        public partial class ProducerDemo : Form
        {
            //声明连接对象工厂
            private IConnectionFactory factory;
    
            public ProducerDemo()
            {
                InitializeComponent();
                InitProducer();
            }
    
            public void InitProducer()
            {
                try
                {
                    //初始化工厂,这里默认的URL是不需要修改的
                    factory = new ConnectionFactory("tcp://localhost:61616");
    
                }
                catch
                {
                    lbMessage.Text = "初始化失败!!";
                }
            }
    
            private void btnConfirm_Click(object sender, EventArgs e)
            {
                //通过工厂建立连接
                using (IConnection connection = factory.CreateConnection())
                {
                    //通过连接创建Session会话
                    using (ISession session = connection.CreateSession())
                    {
                        //通过会话创建生产者,方法里面new出来的是MQ中的Queue
                        IMessageProducer prod = session.CreateProducer(new Apache.NMS.ActiveMQ.Commands.ActiveMQQueue("firstQueue"));
                        //创建一个发送的消息对象
                        ITextMessage message = prod.CreateTextMessage();
                        //给这个对象赋实际的消息
                        message.Text = txtMessage.Text;
                        //设置消息对象的属性,这个很重要哦,是Queue的过滤条件,也是P2P消息的唯一指定属性
                        message.Properties.SetString("filter","demo");
                        //生产者把消息发送出去,几个枚举参数MsgDeliveryMode是否长链,MsgPriority消息优先级别,发送最小单位,当然还有其他重载
                        prod.Send(message, MsgDeliveryMode.NonPersistent, MsgPriority.Normal, TimeSpan.MinValue);

                //发送对象,注意User类要标记为可序列化的
                IObjectMessage message =     prod.CreateObjectMessage(new User(){Name="张三"+i, Age=i});
                 lbMessage.Text
    = "发送成功!!"; txtMessage.Text = ""; txtMessage.Focus(); } } } } }
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using Apache.NMS;
    using Apache.NMS.ActiveMQ;
    
    namespace MqConsumer
    {
        public partial class ConsumerDemo : Form
        {
            public ConsumerDemo()
            {
                InitializeComponent();
                InitConsumer();
            }
    
            public void InitConsumer()
            {
                //创建连接工厂
                IConnectionFactory factory = new ConnectionFactory("tcp://localhost:61616");
                //通过工厂构建连接
                IConnection connection = factory.CreateConnection();
                //这个是连接的客户端名称标识
                connection.ClientId = "firstQueueListener";
                //启动连接,监听的话要主动启动连接
                connection.Start();
                //通过连接创建一个会话
                ISession session = connection.CreateSession();
                //通过会话创建一个消费者,这里就是Queue这种会话类型的监听参数设置
                IMessageConsumer consumer = session.CreateConsumer(new Apache.NMS.ActiveMQ.Commands.ActiveMQQueue("firstQueue"), "filter='demo'");
                //注册监听事件
                consumer.Listener += new MessageListener(consumer_Listener);
                //connection.Stop();
                //connection.Close();  
    
            }
    
            void consumer_Listener(IMessage message)
            {
                ITextMessage msg = (ITextMessage)message;

           //接收对象消息
          
    IObjectMessage msg = (IObjectMessage) message;
    User user = msg.Body as User;
    //异步调用下,否则无法回归主线程
                tbReceiveMessage.Invoke(new DelegateRevMessage(RevMessage),msg);
    
            }
    
            public delegate void DelegateRevMessage(ITextMessage message);
    
            public void RevMessage(ITextMessage message)
            {
                tbReceiveMessage.Text += string.Format(@"接收到:{0}{1}", message.Text, Environment.NewLine);
            }
        }
    }
  • 相关阅读:
    关于SharePoint 2010 Beta2的安装
    SharePoint 2010新体验10 文档评分
    SharePoint 2010 新体验3 文档集
    我在SharePoint 2010 Day上做的一个演示课程
    下载 SharePoint Server 2010 Public Beta (包含中文版)
    关于QuickPart的Q&A
    SharePoint服务器连接配置数据库的连接字符串保存在哪里?
    为SharePoint 2010创建Application Page
    Let's talk about SharePoint 2010
    SharePoint 2010 新体验8 内容类型集线器 (Content Type Hub)
  • 原文地址:https://www.cnblogs.com/yxlblogs/p/4448307.html
Copyright © 2020-2023  润新知