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

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. R语言学习笔记(二十一):字符串处理中的元字符(代码展示)

    元字符有自己的特殊含义 [ ]内的任意字符将被匹配 grep(pattern = "[wW]", x = states, value = T) grep(pattern = &qu ...

  2. Taming the asynchronous beast with ES7

    https://pouchdb.com/2015/03/05/taming-the-async-beast-with-es7.html We have a problem with promises ...

  3. 大数据入门第一天——基础部分之Linux基础(环境准备与先导知识)

    一.Linux环境安装 1.VM的安装 参考Linux环境搭建随笔:http://www.cnblogs.com/jiangbei/p/7248054.html 2.CentOS的安装 同参考上述随笔 ...

  4. Scala中=>的用法

    1. 表示函数的类型(Function Type) 例如: def double(x: Int): Int = x*2 函数double的类型就是 (x: Int) => Int 或者 Int ...

  5. Wannafly挑战赛18B 随机数

    Wannafly挑战赛18B 随机数 设\(f_i\)表示生成\(i\)个数有奇数个1的概率. 那么显而易见的递推式:\(f_i=p(1-f_{i-1})+(1-p)f_{i-1}=(1-2p)f_{ ...

  6. linux bash Shell脚本经典 Fork炸弹演示及命令详解

    Jaromil 在 2002 年设计了最为精简的一个Linux Fork炸弹,整个代码只有13个字符,在 shell 中运行后几秒后系统就会宕机: :(){:|:&};: 这样看起来不是很好理 ...

  7. UART、SPI、I2C协议异同点

    I2C.SPI.UART都是常见的低速板级通信协议,目前主流的SoC都内置了这些通讯协议的控制器,同样,各种传感器.Touch控制器.指纹模块.蓝牙模块.WIFI模块也都兼容这三种通信方式的一种或几种 ...

  8. C++设计模式(转)

    在简书看到CharlesW同学学习设计模式的笔记,感觉很有意思(单身狗的妄想),转载下. 转载:https://www.jianshu.com/p/082662126bdd 好的软件设计是多用代码复用 ...

  9. LeetCode 刷题笔记 155. 最小栈(Min Stack)

    tag: 栈(stack) 题目描述 设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈. push(x) -- 将元素 x 推入栈中. pop() -- 删除栈顶的元素 ...

  10. Oracle数据库之分组查询及排序

    分组查询:使用 group by 来设置分组,把该列具有相同值的多条记录当成一组记录来处理,然后只会输出一条记录,得到的结果会默认使用升序的方式进行排列. 规则: (1)如果使用了分组函数,或者是 g ...