. Net环境下消息队列(MSMQ)对象的应用

原文地址为: . Net环境下消息队列(MSMQ)对象的应用

. Net环境消息队列MSMQ对象应用

 

 

关于消息对象(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");

 

消息队列可以传送简单的文本消息,也可以传送对象消息,但需要满足如下条件:

1class必须有一个无参数的公共构造函数,.Net使用这个构造函数在接收端重建对象。

2class必须标示为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程序)

2297c4e85809598f83694644b3cf7a83.jpe

 

其他相关事项:

  • 关于消息的加密、路由等等特性,需要有配置Active Directory的消息队列服务器。

  • 为了避免存放消息队列的计算机重新启动而丢失消息,可以通过设置消息对象的Recoverable属性为true,在消息传递过程中将消息保存到磁盘上来保证消息的传递,默认为false

  • 消息发送方和消息接收方需采用相同的序列化格式,如XMLBinary

  • 建议每一个消息队列存放相同类型的消息对象,这样可以省掉获取消息对象后,进行类型判别的麻烦。 

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)对象的应用
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值