zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    数据结构-栈(二)模板-C++实现-2,8,16进制转换
    数据结构-栈(一)模板-C++实现
    数据结构-环形队列-队列模板实现-c++代码
    【Prince2科普】Prince2七大流程概论
    自定义时代项目经理的自我修炼 受控环境下项目管理的实践应用
    【项目管理】《挑战埃及》沙盘介绍
    【Prince2科普】P2七大主题之进展
    【Prince2科普】P2七大主题之变更
    【Prince2科普】P2七大主题之风险
    【Prince2科普】P2七大主题之计划
  • 原文地址:https://www.cnblogs.com/Soar-Pang/p/6427299.html
Copyright © 2011-2022 走看看