. Net环境下消息队列(MSMQ)对象的应用
来源:互联网 发布:python的ide哪个好 编辑:程序博客网 时间:2024/05/23 00:01
关于消息对象(MSMQ)的一些基本概念可以从《消息队列(Message Queue)简介及其使用》查阅,这里归纳在.Net 环境下应用消息队列(MSMQ)开发的一些基本对象和方法。
队列类型及其相应的路径格式:
Public: [MachineName]/[QueueName]
Private: [MachineName]/Private$/[QueueName]
Journal: [MachineName]/[QueueName]/Journal$
Machine journal: [MachineName]/Journal$
Machine dead-letter: [MachineName]/DeadLetter$
Machine transactional dead-letter: [MachineName]/XactDeadLetter$
The first portion of the path indicates a computer or domain name or uses a period (.) to indicate the current computer.
1. 创建消息队列
可以手动的方式通过Windows提供的工具创建,或者通过程序的方式创建:
if(MessageQueue.Exists(".//Private$//MSMQDemo"))
queue = new MessageQueue(".//Private$//MSMQDemo");
else
queue = MessageQueue.Create(".//Private$//MSMQDemo");
2. 发送消息
缺省情况下,消息序列化XML格式,也可设置为MessageQueue对象的Formatter属性为BinaryMessageFormatter,以二进制格式序列化。
设置消息序列化格式:
if(rdoXMLFormatter.Checked)
queue.Formatter = new XmlMessageFormatter();
else
queue.Formatter = new BinaryMessageFormatter();
发送简单的文本消息:
string strMessage = "Hello, I am Rickie.";
queue.Send(strMessage, "Simple text message");
消息队列可以传送简单的文本消息,也可以传送对象消息,但需要满足如下条件:
(1)class必须有一个无参数的公共构造函数,.Net使用这个构造函数在接收端重建对象。
(2)class必须标示为serializable(序列化)。
(3)所有的class属性必须可读写,因为.Net在重建对象时不能够恢复只读属性的属性值,因此只读属性不能够序列化。
发送对象消息(CustomerInfo class需要满足上述条件):
CustomerInfo theCustomer = new CustomerInfo("0001", "Rickie Lee", "Rickieleemail@yahoo.com");
queue.Send(theCustomer, "Object message");
3. 读/显示消息
当消息接受后,消息将从队列中删除。可以通过使用MessageQueue.Peek方法来检索消息队列中的第一个消息的复制,保留消息在队列中。不过,这样只能获取的相同的消息。更好的办法是通过foreach来读消息队列中的消息,但不删除队列中的消息。
foreach(System.Messaging.Message message in queue)
{
txtResults.Text += message.Label + Environment.NewLine;
}
4. 接收消息
一般而言,可以通过Receive方法来读取队列中的消息,对于非事务性的队列,优先读取高优先级的消息。如果队列中有多个相同优先级的消息,则以先进先去的方式进行读取消息。对于事务性的队列,则完全以先进先去的方式进行读取消息,忽略消息的优先级。
System.Messaging.Message receivedMessage;
receivedMessage = queue.Receive(TimeSpan.FromSeconds(5));
上面采用同步调用,并且一直等到队列中有可用消息或超时过期。
Demo界面(不在提供DEMO程序):
其他相关事项: 5.消息队列在分布式系统中的应用 消息队列MSMQ和数据库不一样,消息队列缺乏足够的错误检查能力,并且MSMQ由于需要束缚在windows平台,这些是MSMQ的不足之处。另外,在Production环境中,需要编写大量的代码来进行错误检测和响应。还有大量的死信队列、响应队列和日记队列可能部分在企业不同的计算机上,使得跟踪这些问题或进行诊断变得比较困难。 但是,MSMQ作为组件内部连接比较有用。例如,你可以创建一个XML Web Services使用MSMQ来转发对另一个Server端组件的请求,这种设计巧妙回避了其他异步调用的方法,并且确保可扩展性和性能。 References: 1, Matthew MacDonald, Microsoft® .NET Distributed Applications: Integrating XML Web Services and .NET Remoting 2, Rickie, 消息队列(Message Queue)简介及其使用
- . Net环境下消息队列(MSMQ)对象的应用
- . Net环境下消息队列(MSMQ)对象的应用
- . Net环境下消息队列(MSMQ)对象的应用
- . Net环境下消息队列(MSMQ)对象的应用
- Net环境下消息队列(MSMQ)对象的应用
- . Net环境下消息队列(MSMQ)对象的应用
- . Net环境下消息队列(MSMQ)对象的应用
- . Net环境下消息队列(MSMQ)对象的应用
- . Net环境下消息队列(MSMQ)对象的应用
- . Net环境下消息队列(MSMQ)对象的应用
- . Net环境下消息队列(MSMQ)对象的应用
- Net 消息队列(MSMQ) 应用(转)
- .net下的RabbitMQ和MSMQ消息队列
- .net 消息队列MSMQ
- .Net下的MSMQ(微软消息队列)的同步异步调用 (转载)
- .Net下的MSMQ(微软消息队列)的同步异步调用
- .Net消息队列MSMQ的使用实例
- asp.net(C#)下应用MSMQ收发消息
- 消息队列(Message Queue)简介及其使用
- Unpacking Argument Lists
- Xilinx设计元素缩写查询
- 7.c++-内存对齐的一点个人理解(#pragma pack(k))
- MeeGo系统平板电脑和智能手机明年上市
- . Net环境下消息队列(MSMQ)对象的应用
- Update 关联子查询
- Design Pattern - Builder(C#)
- Android-x86 - Porting Android to x86
- 关于WSERV 9 错误的总结!
- Apache+Tomcat+虚拟机整合
- 部署图
- XML文档解析技术
- 利用CDO.Message发送邮件