MSMQ消息传递的优先级
一、消息传递的优先级
在MSMQ中消息在队列里传输是分有优先级的,这里我就以实例的形式介绍下关于优先级的使用,优先级一共有七种,MessagePriority枚举里全部进行了封装。因这里只作程序演示就不一一列举出,仅用了Highest和Normal两种类型,关于消息队列上进行消息传输的七种优先级大家可以参考我下面提供的MessagePriority枚举源代码定义。
那么在发送消息的时候怎么指定消息的优先级呢?在Message对象里封装有一个属性Priority,接受一个枚举MessagePriority类型的值来设置消息传输的优先级。如下:
1System.Messaging.Message message = new System.Messaging.Message();
2message.Priority = MessagePriority.Highest; //最高消息优先级
1private void btnSend_Click(object sender, EventArgs e)
2{
//连接到本地的专用队列myQueue
MessageQueue myQueue = new MessageQueue(".\\private$\\myQueue");
System.Messaging.Message message = new System.Messaging.Message();
message.Label = tbName.Text;
message.Body = tbContext.Text;
if (cbPriority.Checked)
{
message.Priority = MessagePriority.Highest;
}
else
{
message.Priority = MessagePriority.Normal;
}
myQueue.Send(message);
MessageBox.Show("成功发送消息到队列");
19}
1private void DisplayMessage()
{
//连接到本地队列
MessageQueue myQueue = new MessageQueue(".\\private$\\myQueue");
myQueue.MessageReadPropertyFilter.Priority = true;
DataTable messageTable = new DataTable();
messageTable.Columns.Add("名字");
messageTable.Columns.Add("消息内容");
messageTable.Columns.Add("优先级");
XmlMessageFormatter formatter = new XmlMessageFormatter(new string[] { "System.String" });
try
{
//从队列中接收消息
System.Messaging.Message[] messages = myQueue.GetAllMessages();
for (int index = 0; index < messages.Length; index++)
{
messages[index].Formatter = formatter;
string label = messages[index].Label;
string body = messages[index].Body.ToString();
string priority = messages[index].Priority.ToString();
messageTable.Rows.Add(new string[] { label, body, priority });
}
this.dgvMessage.DataSource = messageTable;
}
catch (MessageQueueException e1)
{
MessageBox.Show(e1.Message);
}
}
}
注:要完成以上应用还需注意一点,由于消息的优先级是枚举类型,在直接messages[index].Priority.ToString();这种方式来获取优先级转化到字符串的时候,他需要一个过滤器(Filter),否则会抛出一个InvalidCastExceptionle类型的异常,异常信息"接收消息时未检索到属性 Priority。请确保正确设置了 PropertyFilter。",要解决这问题只需要把消息对象的MessageReadPropertyFilter(过滤器) 的Priority设置为true就OK了。见上面代码里!^.^
1// 摘要:
2// 指定消息队列在消息传递到队列的过程中应用于该消息的优先级,以及指定何时将消息插入目标队列。
3public enum MessagePriority
4{
// 摘要:
// 最低消息优先级。
Lowest = 0,
//
// 摘要:
// 位于 Low 和 Lowest 消息优先级之间。
VeryLow = 1,
//
// 摘要:
// 低消息优先级。
Low = 2,
//
// 摘要:
// 普通消息优先级。
Normal = 3,
//
// 摘要:
// 位于 System.Messaging.MessagePriority.High 和 System.Messaging.MessagePriority.Normal
// 消息优先级之间。
AboveNormal = 4,
//
// 摘要:
// 高消息优先级。
High = 5,
//
// 摘要:
// 位于 Highest 和 High 消息优先级之间。
VeryHigh = 6,
//
// 摘要:
// 最高消息优先级。
Highest = 7,
37}
MSMQ消息传递的优先级的更多相关文章
- ASP.NET中进行消息处理(MSMQ) 二(转)
在我上一篇文章<ASP.NET中进行消息处理(MSMQ)一>里对MSMQ做了个通俗的介绍,最后以发送普通文本消息和复杂的对象消息为例介绍了消息队列的使用. 本文在此基础上继续介 ...
- ASP.NET中进行消息处理(MSMQ) 二
在我上一篇文章<ASP.NET中进行消息处理(MSMQ)一>里对MSMQ做了个通俗的介绍,最后以发送普通文本消息和复杂的对象消息为例介绍了消息队列的使用. 本文在此基础上继续介绍MSMQ的 ...
- XMPP学习及使用1
XMPP 简单介绍 本小节将简要介绍 XMPP,它的起源.以及为何它是一个适合实时 web 通信的协议.您将检查 XMPP 通信设置的组件,并查看展示这些组件怎样使用的演示样例. Web 标准和 XM ...
- Openfire配置过程,以及与php交互注意事项。
Ben Werdmuller 是一位 Web 策划师和开发人员,他专注于开放源码平台.他是开源社交网络框架 Elgg 的共同创始人和技术带头人.Ben 的博客 http://benwerd.com/. ...
- 使用MSMQ 远程队列
------------------------------------------------------------------------------------------------- -- ...
- MSMQ(Microsoft Message Queue)
http://www.cnblogs.com/sk-net/archive/2011/11/25/2232341.html 利用 MSMQ(Microsoft Message Queue),应用程序开 ...
- WCF分布式开发必备知识(1):MSMQ消息队列
本章我们来了解下MSMQ的基本概念和开发过程.MSMQ全称MicroSoft Message Queue,微软消息队列,是在多个不同应用之间实现相互通信的一种异步传输模式,相互通信的应用可以分布于同一 ...
- MSMQ消息队列
MSMQ全称MicroSoft Message Queue,微软消息队列,是在多个不同的应用之间实现相互通信的一种异步传输模式,相互通信的应用可以分布于同一台机器上,也可以分布于相连的网络空间中的任一 ...
- Msmq设计文档(赋源代码)
Msmq设计文档(赋源代码) Msmq设计文档 文件状态: [√] 草稿 [ ] 正式发布 [ ] 正在修改 文件标识: ECI-MSMQ v01 当前版本: 0.5 作 者: ...
随机推荐
- 剥开比原看代码10:比原是如何通过/create-key接口创建密钥的
作者:freewind 比原项目仓库: Github地址:https://github.com/Bytom/bytom Gitee地址:https://gitee.com/BytomBlockchai ...
- RabbitMq的整理 exchange、route、queue关系
https://blog.csdn.net/samxx8/article/details/47417133
- JS 事件绑定、事件监听、事件委托详细介绍
原:http://www.jb51.net/article/93752.htm 在JavaScript的学习中,我们经常会遇到JavaScript的事件机制,例如,事件绑定.事件监听.事件委托(事件代 ...
- AngularJS 笔记1
2017-03-23 本文更新链接: http://www.cnblogs.com/daysme/p/6606805.html 什么是 angularjs 2009年有两个外国人创建,后由谷歌收购并开 ...
- Webpack+React项目入门——入门及配置Webpack
一.入门Webpack 参考文章:<入门Webpack,看这篇就够了> 耐心看完这篇非常有帮助 二.React+Webpack环境配置 参考文章:<webpack+react项目初体 ...
- XMind 8 Update 7 Pro 激活码
XMind Update Pro 邮箱:x@iroader 序列号: XAka34A2rVRYJ4XBIU35UZMUEEF64CMMIYZCK2FZZUQNODEKUHGJLFMSLIQMQUCUB ...
- git 修改默认编辑器
vim,notepad(windows自带),notepad++ 当然要选notepad++ 1.首先下载notepad++ 2.将notepad++安装目录放到path中 3.git config ...
- R语言矩阵栅格显示矩阵颜色显示
效果如下:
- css无定宽水平居中
转载:http://www.cnblogs.com/jogen/p/5213566.html 这个博客的菜单ui还是棒棒的. 方法一 思路:显示设置父元素为:table,子元素为:cell-table ...
- Memcached安装&启动
安装 *Linux系统安装memcached,首先要先安装libevent库,安装请指定 --with--libevent=PATH(若安装过程中出现configure: error : no acc ...