快速业务通道

在ASP.NET中进行消息处理(MSMQ) 二

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-19

在我上一篇文章《ASP.NET中进行消息处理(MSMQ)一》里对MSMQ做了个通俗的介绍,最后以发送普通文本消息和复杂的对象消息为例介绍了消息队列的使用。本文在此基础上继续介绍MSMQ的相关知识点,最后还是通过一个示例程序来分析MSMQ在实际项目开发中的应用。

建议:如果你对MSMQ不够了解,在你阅读本文前请先阅读第一部分:《ASP.NET中进行消息处理(MSMQ)一》。

一、消息传递的优先级

在MSMQ中消息在队列里传输是分有优先级的,这里我就以实例的形式介绍下关于优先级的使用,优先级一共有七种,MessagePriority枚举里全部进行了封装。因这里只作程序演示就不一一列举出,仅用了Highest和Normal两种类型,关于消息队列上进行消息传输的七种优先级大家可以参考我下面提供的MessagePriority枚举源代码定义。

那么在发送消息的时候怎么指定消息的优先级呢?在Message对象里封装有一个属性Priority,接受一个枚举MessagePriority类型的值来设置消息传输的优先级。如下:

1System.Messaging.Message message = new System.Messaging.Message();
2message.Priority = MessagePriority.Highest; //最高消息优先级

下面来看看一个在消息传输中使用优先级的示例程序,通过示例程序会学习得更明白。示例程序界面:

在ASP.NET中进行消息处理(MSMQ) 二

根据界面可知,提供了消息名字,消息优先级和消息内容三个输入项,前面曾经说过,这里为了方便演示就仅用了Highest和Normal两种类型,当点击发送消息的时候就通过是否选择优先级来设置消息的优先级,代码如下:

1private void btnSend_Click(object sender, EventArgs e)
2{
3  //连接到本地的专用队列myQueue
4  MessageQueue myQueue = new MessageQueue(".\\private$\\myQueue");
5  System.Messaging.Message message = new System.Messaging.Message();
6  message.Label = tbName.Text;
7  message.Body = tbContext.Text;
8
9  if (cbPriority.Checked)
10  {
11    message.Priority = MessagePriority.Highest;
12  }
13  else
14  {
15    message.Priority = MessagePriority.Normal;
16  }
17  myQueue.Send(message);
18  MessageBox.Show("成功发送消息到队列");
19}

这里我们可以向队列里发送两条消息,以便后面测试读取方法,发送两条消息到队列,此时,从队列消息中可以看到:

在ASP.NET中进行消息处理(MSMQ) 二

"刷新队列"实质上就是把队列里的消息全部读取出来,具体的实现在《ASP.NET中进行消息处理(MSMQ)一》里已经作了详细的介绍,这里就不在多说,看看下面的代码:

1private void DisplayMessage()
2    {
3      //连接到本地队列
4      MessageQueue myQueue = new MessageQueue(".\\private$\\myQueue");
5      myQueue.MessageReadPropertyFilter.Priority = true;
6      DataTable messageTable = new DataTable();
7      messageTable.Columns.Add("名字");
8      messageTable.Columns.Add("消息内容");
9      messageTable.Columns.Add("优先级");
10      XmlMessageFormatter formatter = new XmlMessageFormatter(new string[] { "System.String" });
11      try
12      {
13        //从队列中接收消息
14        System.Messaging.Message[] messages = myQueue.GetAllMessages();
15        for (int index = 0; index < messages.Length; index++)
16        {
17          messages[index].Formatter = formatter;
18
19          string label = messages

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号