zoukankan      html  css  js  c++  java
  • 初识Message Queue之--基础篇

          之前我在项目中要用到消息队列相关的技术时,一直让Redis兼职消息队列功能,一个偶然的机会接触到了MSMQ消息队列。秉着技术还是专业的好为原则,对MSMQ进行了学习,以下是我个人的学习笔记。

    一、什么是MSMQ

    在我理解中,消息队列就是一个数据的容器,并且可以异步处理数据,提高数据的并发性。比如投递简历:用人单位就像是消息队列,在同一时间,可以接受大量的简历(数据)。然后等回公司了再一份一份的取出查看。

    二、MSMQ功能启动(win 7为例)

          好多系统默认是不开启消息队列(MSMQ)的。故,我们要手动开启。具体流程为:打开控制面板-》程序和功能-》打开或关闭Windows功能(时间比较长)-》勾选Microsoft Message Queue(MSMQ)服务器;即可。如图所示:

    1、

    2、

    3、

    完成以上操作,MSMQ便正常启动了;

     三、创建一个消息队列(暂做了解,代码也可以创建,感觉代码更方便直观)

         我们通过打开计算机管理,就可以看到消息队列的内容了。(计算机管理打开方式:控制面板-》管理工具-》计算机管理)如图:

          我们可以看出,系统给我们提供了四种队列,但是我们用户只能使用专用队列这一项。队列地址以private$开头。

          我们可以尝试创建一个专用队列,"右击"专用队列,再点击"新建",得到新增界面如下图。

          对话框里面有一个事务性,说明MSMQ是支持事物提交,由于目前没有涉及到事物性,因此暂不讲解。

          我们起一个名为test的消息队列点击确定,我们便可以看到在右侧出现了一个名为test的队列。

    四、怎么样在.NET中使用MSMQ

          对于.NET来说,微软封装了操作MSMQ的类,MessageQueue ;该类需要引入命名空间System.Messaging;

          以下分模块介绍MessageQueue 中的主要方法:

    1、创建MSMQ队列(Create)

                string path =".\private$\"+ "test";//设置消息队列路径
                if (!MessageQueue.Exists(path))//判断该路径是否存在
                {
                    MessageQueue.Create(path);//如果不存在则创建
                }
                MessageBox.Show("ok");

     2、发送数据(Send)

              string path = ".\private$\" + "test";//设置消息队列路径
              MessageQueue msqs = new MessageQueue(path);//创建指定路径下的消息队列对象
              Message ms = new Message();//创建消息对象
              ms .Formatter = new System.Messaging.XmlMessageFormatter(new Type[] { typeof(string) });//设置消息的Formatter数据类型
              msqs.Send(ms);
              MessageBox.Show("成功");

    注:在发送时,尽量使用消息队列对象指定一个Formatter类型(用Formatter属性)。在接收和发送均用相同类型。否则有可能程序在Receive时就抛异常。

    3、接收数据(Receive)

                string path = ".\private$\" + "test";//设置消息队列路径
                MessageQueue msqs = new MessageQueue(path);//创建指定路径下的消息队列对象
                System.Messaging.Message mes =  msqs.Receive();//获取单条数据(如果没有数据,当前进程会被阻塞)
                string message = mes.Body.ToString();//获取Message内的内容
                MessageBox.Show(message);

    注:Receive方法在没有数据接收时,会阻塞线程。因此,建议放在单独的线程中运行,以保证程序的稳定运行;

          Message是MSMQ的一个数据容器,其中数据存储在Body中。Body是一个已经被序列化的数据。故,在使用时要转换为相应的类型。

          以上是基础的MSMQ的使用方式,掌握上述技术,可以使用MSMQ进行简单的数据存储。之后有更高级的用法我再补充。谢谢!

  • 相关阅读:
    行定位符、单词定界符实例用法
    什么是正则表达式?
    PHP正则表达式语法汇总
    PDO中的存储过程的详细介绍
    PDO中的事务处理具体介绍
    PDO中错误处理的方法
    PDO中错误处理的方法
    使用默认模式-PDO::ERRMODE_SILENT
    PDO中执行SQL语句的三种方法
    使用默认模式-PDO::ERRMODE_SILENT
  • 原文地址:https://www.cnblogs.com/mylydg/p/5810992.html
Copyright © 2011-2022 走看看