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

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:\Windows\System32\msmq\storage目录。

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

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);
}
}

  

消息队列第一篇:MessageQueue介绍的更多相关文章

  1. 高性能消息队列 CKafka 核心原理介绍(上)

    欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~ 作者:闫燕飞 1.背景 Ckafka是基础架构部开发的高性能.高可用消息中间件,其主要用于消息传输.网站活动追踪.运营监控.日志聚合.流式 ...

  2. 消息队列第二篇:MessageQueue实战(课程订单)

    上一篇:消息队列介绍 本篇一开始就上代码,主要演练MessageQueue的实际应用.用户提交订单(消息发送),系统将订单发送到订单队列(Order Queue)中:订单管理系统(消息接收)端,监听消 ...

  3. RabbitMQ消息队列入门篇(环境配置+Java实例+基础概念)

    一.消息队列使用场景或者其好处 消息队列一般是在项目中,将一些无需即时返回且耗时的操作提取出来,进行了异步处理,而这种异步处理的方式大大的节省了服务器的请求响应时间,从而提高了系统的吞吐量. 在项目启 ...

  4. 消息队列-一篇读懂rabbitmq(生命周期,confirm模式,延迟队列,集群)

    什么是消息队列? 就是生产者生产一条消息,发送到这个rabbitmq,消费者连接rabbitmq并且进行消费,生产者和消费者并需要知道对方是如何工作的,从而实现程序之间的解耦,异步和削峰,这也就是消息 ...

  5. webservice第一篇【介绍、Scoket、http调用、wsimport调用】

    WebService介绍 首先我们来谈一下为什么需要学习webService这样的一个技术吧-. 问题一 如果我们的网站需要提供一个天气预报这样一个需求的话,那我们该怎么做????? 天气预报这么一个 ...

  6. jquery-easyUI第一篇【介绍、入门、使用常用的组件】

    什么是easyUI 我们可以看官方对easyUI的介绍: easyUI就是一个在Jquery的基础上封装了一些组件-.我们在编写页面的时候,就可以直接使用这些组件-非常方便-easyUI多用于在后台的 ...

  7. OpenStack学习系列-----第一篇 OpenStack介绍

    刚开始接触OpenStack,被它所承诺的前景,以及现在业界对它的期望吸引(OpenStack被誉为21世纪的Linux开源社区,可以预见其的发展前景是何其广阔.).怎么说呢,我现在也暂时相信,Ope ...

  8. AWK第一篇------全面介绍

    AWK-文本流编辑器 目录 [隐藏] 1 命令行语法 2 用shell实现调用awk 3 awk语言概要 3.1 记录和字段 3.2 脚本的格式 3.3 行为终止 3.4 注释 3.5 模式 3.6  ...

  9. python第一篇-------python介绍

    一.python介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,Guido开始写Python语言的编译器.Python这个名字,来自Guido所 ...

随机推荐

  1. ARM汇编语言

    ---恢复内容开始--- arm汇编语言 汇编语言是一种程序设计语言,arm处理器是一种16/32位的嵌入式RISC微处理器.一开始我把这混为一谈了.ARM汇编的特点:汇编语言,又叫助记符语言. 1) ...

  2. pwd的实现20155301

    pwd的实现 任务要求: 1) 学习pwd命令 2) 研究pwd实现需要的系统调用(man -k; grep),写出伪代码 3) 实现mypwd 4) 测试mypwd 实现过程 1)首先查看是否有有用 ...

  3. c语言数组的赋值问题

    int arr[5]; 当此语句出现再main()之前时,所有的内容被自动赋值为0. 当此语句出现再main()之中时,所有的内容都保持原有内容不变. int arr[5]={0}; 当出现词类语句时 ...

  4. 无聊中,写个常见的图片保护分类-iOS

    当美工给出例如下面这种图的时候,但是需要拉伸的时候,就不得不做拉伸保护了. //调用代码 UIImage * img = [UIImage protectedImageWithLocalImageNa ...

  5. Python 从零搭建 Conf_Web 配置管理平台

    作者:Eagle 某船舶行业科技公司,运维工程师,51Reboot学员.通过在51Reboot学习,由运维工程师转至运维开发工程师.完成公司自动化平台的构建,对运维开发有了自己的理解,空闲时间写了这么 ...

  6. 公网API安全--OAuth认证

    之前写过一个基于签名的公网API访问安全控制,另一种方式是基于OAuth认证协议做安全控制. 说明 用户访问A客户端,使用B的服务及资源.B只有征得用户的授权,才允许A客户端使用B上用户的资源和服务. ...

  7. Python对中文的支持

    在Python中,经常会出现中文,出现中文有时候会报错,这时候很多新手在处理中文编码的时候会有点不知所措. Python主要有2.x和3.x版本两个区别,在3.x版本中,已经支持中文直接开发,而不需要 ...

  8. 报错:Cannot create PoolableConnectionFactory (The server time zone value 'CST' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverT

    报错:Cannot create PoolableConnectionFactory (The server time zone value 'CST' is unrecognized or repr ...

  9. centos7搭建ANT+jmeter+jenkins接口测试自动化环境

    一.环境准备 因为用到了jmeter和apache-tomcat,centos7必须要有java环境,所以配置jdk和apache-tomcat什么的,就不多说了,自行操作 帮你们偷懒: ant下载地 ...

  10. Revit开发小技巧——撤销操作

    最近开发Revit命令需要限制某些操作,思路是监控用户操作,如果达到限制条件,将操作回退.思路有两种: 1.调用WindowsAPI,发送快捷命令Ctrl+Z. 2.通过Revit底层提供DLL找到回 ...