• 消息队列第一篇:MessageQueue介绍


    消息队列有哪些好处或功能:

    1、消息可以在断开连接的环境下发送。不需要同时运行正在发送和正在接收的应用程序。

    2、使用快捷模式,消息可以非常快地发送。在快捷模式下,消息存储在内存中。

    3、对于可恢复的机制,消息可以使用有保证的交付方式发送。可恢复的消`息存储在文件中。在服务器重新启动时发送它们。

    4、用访问控制列表来保护消息队列,可以确定哪些用户可以发送或接收队列中的消息。消息还可以加密,避免网络嗅探器读取其中的数据。消息在发送时可以指定优先级,这样可以更快地处理高优先级的项。

    5、Message Queuing 3.0支持多播消息的发送。

    6、Message queuing 4.0支持病毒消息。病毒消息不能解析。可以定义病毒队列中不能解析的消息是可以移动的。例如,如果从正常的队列中读取消息后,对应作业要把消息插入数据库中,但消息不能插入数据库,因此该作业失败,该消息就会发送到病毒队列中。有人负责处理病毒队列,这个人应以能解析病毒消息的方式来处理该消息。

    7、Message Queuing 5.0支持更安全学身份验证算法,可以处理大量队列(Message queuing 4.0在处理几千个队列时有性能问题)。

    消息队列有几种类型的消息:
    1、一般消息——由应用程序发送。(只要发出去就行了
    2、确认消息——报告一般消息的状态。把确认消息发送到管理队列中,来报告一般消息的发送是否成功。(我知道是不是发成功了
    3、响应消息——当原始发送者需要某种特殊应答时,由接收应用程序发送响应消息。(我知道别人收到了
    4、报告消息——由消息队列系统生成。测试消息和路由跟踪消息属于此类。(没试过

    消息队列是一个消息存储库。存储在磁盘上的消息位于C:WindowsSystem32msmqstorage目录。

    公共队列或私有队列通常用于发送消息,但还有其他队列类型:

    1、公共队列在Active Directory中发布。这些队列的信息通过Active Directory域复制。可以使用浏览和搜索功能获得这些队列的信息。即使不知道放置队列的计算机名,也可以访问公共队列。还可以把这种队列从一个系统移动到另一个系统上,而无须通知客户。但不能在Workgroup环境下创建公共队列,因为需要Active Directory。消息队列服务器必须在域环境中才能使用公共队列,,但是由于我的电脑不在域环境中,没有测试

    2、私有队列不在Active Directory中发布。只有在知道队列的完整路径名时才能访问这些队列。私有队列可以在Workgroup环境下使用。(我的Demo就是基于私有队列

    3、日志队列用于在发送或接收消息后,保存消息的副本。启动公共或私有队列的日志功能,就会自动创建一个日志队列。在日志队列中,可以有两种不同的队列类型:源日志队列和目标日志队列。通过消息的属性打开源日志功能,用源系统存储日志消息。用队列的属性打开目标日志功能,这些消息存储在目标系统的日志队列中。

    4、如果消息没有在指定的超时前到达目标系统,该消息就存储在死信队列中。在同步编程中,错误会被立即检测出来,但使用消`息队列处理错误的方式必须不同。死信队列可以用于检查未到达目的地的消息。

    5、管理队列包含发送消息的确认消息。发送者可以指定一个管理队列,发送者从中接收消息是否成功发送的通知。

    6、如果需要把多条简单的确认消息用作接收端的应答,就可以使用响应队列。接收应用程序可以把响应消息发送回原始发送者。

    7、报告队列用于测试消息。把公共或私有队列的类型改为预定义的ID{5EE8F33-CCE9-11CF-B108-OuOAFD61cE9},就可以创建报告队列。报告队列可以用作跟踪其路由中的消息的测试工具。

    8、系统队列是私有的,由消息队列系统使用。这些队列用于管理消息,存储通知消息,保证事务消息的正确顺序。

    Hello World

            /// <summary>
            /// 发送按钮事件
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void button1_Click(object sender, EventArgs e)
            {
                if (!string.IsNullOrEmpty(textBox1.Text.Trim()))
                {
                    try
                    {
                        //判断私有队列是否存在
                        if (!MessageQueue.Exists(@".Private$MyPrivateQueue"))
                        {
                            //创建一个私有队列
                            MessageQueue.Create(@".Private$MyPrivateQueue");
                        }
                        //实例一个队列
                        var queue = new MessageQueue(@".Private$MyPrivateQueue");
                        //发送消息(第一个参数为消息内容,第二个参数为消息标签或名称)
                        queue.Send(textBox1.Text.Trim(), "TestLable");
                    }
                    catch (MessageQueueException ex)
                    {
                        MessageBox.Show(ex.Message, "异常消息", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
            }
    

      

        /// <summary>
            /// 接收按钮事件
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void button2_Click(object sender, EventArgs e)
            {
                try
                {
                    //判断私有队列是否存在
                    if (!MessageQueue.Exists(@".Private$MyPrivateQueue"))
                    {
                        //创建一个私有队列
                        MessageQueue.Create(@".Private$MyPrivateQueue");
                    }
                    //实例一个队列
                    var queue = new MessageQueue(@".Private$MyPrivateQueue");
                    //读取消息,设置格式化方式
                    queue.Formatter = new XmlMessageFormatter(new string[] { "System.String" });
                    //读取第一个消息
                    var message = queue.Receive();
                    //显示消息内容
                    label1.Text = message.Body.ToString();
                }
                catch (MessageQueueException ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
    

      

  • 相关阅读:
    Python中 sys.argv[]的用法简明解释
    python多线程
    python 多进程
    shell----bash
    linux crontab
    Elastic search 概述
    Elastic search 入门
    Elastic search CURL命令
    Elastic search 基本使用
    Elastic search 字段折叠 collaose
  • 原文地址:https://www.cnblogs.com/fjzhang/p/7263825.html
Copyright © 2020-2023  润新知