MSMQ研究


开发过程记录如下:

1、   本机配置MSMQ ------控制面板-------启动或者关闭Windows功能----默认安装MSMQ即可

注意:本地安装后再VS中才能引用System.Messaging;

安装后:计算机管理界面出现消息队列

2.创建控制台程序

引用:

using System.Configuration;

using System.Messaging;

3.MSMQ传递消息格式为XML 或二进制

获取指定路径下的所有XML文本

发送到本地队列中

        #region 使用本地初始化信息队列

            //MessageQueue messageQueue = null;

            // if (MessageQueue.Exists(@".private$MQtest1"))

            // {

            //    messageQueue = new MessageQueue(@".Private$MQtest1");

            //    messageQueue.Label = "MQtesting";

            // }

            // else

            // {

            //     messageQueue = MessageQueue.Create(@".Private$MQtest1");

            //     messageQueue.Label = "MQtest1";

            // }

            #endregion

#region  获取路径下所有xml文件

            string path = ConfigurationManager.AppSettings["path"].ToString();

 

 

            var files = Directory.GetFiles(path, "*.xml");

            //messageQueue.Formatter = new XmlMessageFormatter(files);

 

            foreach (var file in files)

            {

                //打印测试是否获取到文件

                //Console.WriteLine(file);

 

                //加载xml内容

                XmlDocument doc = new XmlDocument();

                doc.Load(file);

                string xs = doc.InnerXml;

                Message ms = new Message();

                ms.Formatter = new System.Messaging.XmlMessageFormatter(new Type[] { typeof(string) });

                ms.Body = xs;

                messageQueue.Send(ms);

            }

            #endregion

生成结果:

4.发送消息到远端MSMQ

远端无需创建,无需验证是否存在

#region  使用远端队列

            //string queuepath = ConfigurationManager.AppSettings["hxqueue"].ToString();

            MessageQueue messageQueue = new MessageQueue(@"FormatName:Direct=TCP: (远端IP) private$SoarMQtest1");

 

            #endregion

发送消息后,本地会出现传出队列

如图:

远端MSMQ会出现消息数据:

5.消息的序列化和消息的接收

  System.Messaging.Message mes = messageQueue.Receive();//获取单条数据(如果没有数据,当前进程会被阻塞)

            mes.Formatter = new System.Messaging.XmlMessageFormatter(new Type[] { typeof(string) });

            string message = mes.Body.ToString();

            Console.WriteLine(message);

  1、全部获取,循环处理?

2、线程逐个抓取,逐个处理?

还需要研究部分:

1、   把控制台程序写成后台服务?监听文件夹中文件,

2、   发送到MSMQ的数据如果保存到对应磁盘

3、   除了string类型,是否有其他类型传输方式

也许并不是你需要的内容,这只是我人生的一些痕迹. -- soar.pang
原文地址:https://www.cnblogs.com/Soar-Pang/p/6427299.html