码迷,mamicode.com
首页 > 其他好文 > 详细

ActiveMQ系列(1) - 使用入门

时间:2016-02-24 14:13:11      阅读:284      评论:0      收藏:0      [点我收藏+]

标签:

没网的日子真的不好过啊
  • 1.背景:
                  对于常见业务中,数据并发是一个很头疼的问题,很多时候,会出现资源共享导致线程阻塞的问题,这时候问题就来了,,,老板也尾随来了,来找你麻烦了,钱哪去了?,具体点儿,
            比如生成订单时候,多用户同时下单并支付,这都是白花花的银子啊,算错了,真的出现上面的情况了,还一个就是会遇到数据脏读问题,那么怎么解决?不以规矩不成方圆,所以,从小到大,
            老师总让我们排队,井然有序的入课堂就坐,就因为有序所以也提升了效率。ActiveMQ就做到了,列队形式,类似线程池列队,redis的push prop,当然redis更猛。
 
  • 2.系统环境:

           windows 10 企业版本 64位


  • 3.获取 与 安装 :

              a)     http://activemq.apache.org/ 自行选择中意版本(或 文章底部,我上传了,是目前的最新版本), 注意看域名,apache,所以肯定离不开 jdk了, jdk获取:

                      http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html ,同时配置 JAVA_HOME环境
              b)    安装 ActiveMQ:
                        首先,解压下载的zip文件包,文件目录如下:
         技术分享
                        技术分享
                        bin       不用说了,和tomcat一样的,都是bat的启动或者停止的批处理和几个相关的jar包,
                        conf     顾名思义就是存放配置文件的
                        data     数据,什么数据?执行过程中生成的log等文件都在里面
                        docs    就是现在要用到的,安装以及使用:
      
  • 4 安装使用:
         doc文件夹中的 提示:
         技术分享                        技术分享
 
                          执行之后,下面的配置可以不用看了,因为部分不正确,直接在浏览器地址栏键入:Http://127.0.0.1:(端口号)8161,这时候可以看到以下界面:
         技术分享
                           技术分享
                            进行相关配置,默认用户名称和密码,上一步骤有提示,account/password ->admin/admin,显示如下界面:
          技术分享
                            技术分享
                            
                          -----其实测试过程中发现,上面的东西如果没有特殊要求,可以不用变化,就可以直接使用,这地方注意,看以下截图:
         技术分享
            技术分享
                执行 bin文件夹中的activemq.bat之后,发现执行到这个地方就不执行了,起初以为出现异常了,其实不是这个问题,可以不用理会,直接写代码即可。
 
  • 5. 参考  p2p 案例代码:                        
         依次引入:Apache.NMS.dll,Apache.NMS.ActiveMQ.dll即可食用。
    (案例来自,底部链接,虽然是别人的东西,但是自己动手写一遍和只看别人的东西,是不可用言语能表达的。):控制台程序:
服务端
    
namespace TestActiveMQ
    {
        class Program
        {
            private static IConnectionFactory factory //需要引用 Apache.NMS;
                = new ConnectionFactory("tcp://localhost:61616");//需要引用Apache.NMS.ActiveMQ;

            static void Main(string[] args)
            {
                //建立连接
                using (IConnection connection = factory.CreateConnection())
                {
                    //通过连接创建session会话
                    using (ISession session = connection.CreateSession())
                    {
                        //通过会话创建生产者,方法里面new出来的是MQ中的Queue
                        IMessageProducer producer = session.CreateProducer(new Apache.NMS.ActiveMQ.Commands.ActiveMQQueue("firstQueue"));
                        //创建一个发送的消息对象
                        ITextMessage message = producer.CreateTextMessage();

                        //给这个对象赋实际的消息
                        message.Text = "12321321321";
                        //设置消息对象的属性,这个很重要哦,是Queue的过滤条件,也是P2P消息的唯一指定属性
                        message.Properties.SetString("filter", "demo");
                        //生产者把消息发送出去,几个枚举参数MsgDeliveryMode是否长链,MsgPriority消息优先级别,发送最小单位,当然还有其他重载
                        producer.Send(message, MsgDeliveryMode.NonPersistent, MsgPriority.Normal, TimeSpan.MinValue);

                        Console.WriteLine("发送成功!");
                        Console.ReadLine();
                    }
                }

            }
        }
    }

客户端:

public partial class Form1 : Form
    {
        public Form1()
        {
            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;
            //异步调用下,否则无法回归主线程
            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);
        }

    }

执行结果:

技术分享

    
 
 
 

ActiveMQ系列(1) - 使用入门

标签:

原文地址:http://www.cnblogs.com/Tmc-Blog/p/5212589.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!