MSMQ消息队列的简单使用

MSMQ全称MicroSoft Message Queue,微软消息队列,是在多个不同的应用之间实现相互通信的一种异步传输模式,相互通信的应用可以分布于同一台机器上,也可以分布于相连的网络空间中的任一位置。它的实现原理是:消息的发送者把自己想要发送的信息放入一个容器中(我们称之为Message),然后把它保存至一个系统公用空间的消息队列(Message Queue)中;本地或者是异地的消息接收程序再从该队列中取出发给它的消息进行处理。

首先,我们应该先来安装这个‘容器’,1.打开控制面板=》2.选择 ‘程序和功能’=》3.选择 ‘打开或关闭Windows功能’=》4.选择  Microsoft Meeage Queue 安装就可以了。

安装好以后,就可以来看看这个队列的基本操作了。打开 ‘计算机管理’ 我们可以看到安装的消息队列:

1、建立一个控制台项目;

2.项目引用一下System.Messaging,操作队列的功能都在此dll中;

3.来创建一个队列;

 

       public static string msgPath = @".Private$cfldcn";//创建了一个名字为cfldcn的队列
      //创建消息队列
        public static void CreateQueue()
        {
            MessageQueue mq = MessageQueue.Create(msgPath);
        }

4.发送一个消息

  //发送消息
        public static void SendQueue()
        {
            MessageQueue mq =new MessageQueue(msgPath);
            mq.Send("长江长江我是黄河!", "toSeek");//发送消息并添加一个标签
            Console.ReadKey();

        }


5.读取消息

  //peek读取消息
        public static void PeekReadMsg()
        {
            MessageQueue mq = new MessageQueue(msgPath);
            mq.Formatter = new XmlMessageFormatter(new string[] { "System.String" });//设置消息队列格式化器
            Message msg = mq.Peek();//接受消息但不删除
            Console.WriteLine("Label:{0},Msg:{1}", msg.Label, msg.Body);
            Console.ReadKey();

        }

        //获取队列中的所有消息
        public static void ReadMsg()
        {
            MessageQueue mq = new MessageQueue(msgPath);
            mq.Formatter = new XmlMessageFormatter(new string[] { "System.String" });//设置消息队列格式化器
            Message[] msgArray = mq.GetAllMessages();
            if (msgArray.Length > 0)
            {
                foreach (Message msg in msgArray)
                {
                    Console.WriteLine("Label:{0},Msg:{1}", msg.Label, msg.Body);
                }
            }
            Console.ReadKey();
        }

        //获取消息后并删除
        public static void ReadAfterDelete()
        {
            MessageQueue mq = new MessageQueue(msgPath);
            mq.Formatter = new XmlMessageFormatter(new string[] { "System.String" });//设置消息队列格式化器
            Message[] msgArray = mq.GetAllMessages();
            if (msgArray.Length > 0)
            {
                for (int i = 0; i < msgArray.Length; i++)
                {
                    Message msg=mq.Receive();//接受消息且删除
                    Console.WriteLine("Label:{0},Msg:{1}", msg.Label, msg.Body);
                }
            }
        }



 

原文地址:https://www.cnblogs.com/ypyhy/p/6894663.html