简介
消息队列为您的应用程序提供异步程序模式。对于分布式和互联网应用,当不需要实际的服务及时响应的时候,可以使用消息队列。即使服务发生例外,它也可以使你的应用程序在消息传递上有强劲的保障。
涉及的命名空间
消息队列功能建于 System.Messaging 命名空间中,必须将它导入到你的应用程序中。
Imports System.Messaging
设置消息队列
在使用消息对列之前,必须在你的机器上先创建和配置它们。详细的介绍超出了本文内容。我将假定在你的机器上配置了称为 MyQueue 的私有队列。
发送数据到消息队列中
下面的代码解释如何将一个完整的文件发送到一个消息队列中:
Dim objMsgQ As New MessageQueue("WIN2000\private$\MyQueue") Dim newMessage As New System.Messaging.Message() Dim fs As Stream fs = File.Open("somepath", FileMode.Open) newMessage.BodyStream = fs objMsgQ.Send(newMessage) fs.Close()
- 我们首先创建 MessageQueue 和 Message 类的实例。 MessageQueue 类代表我们的私有队列MyQueue。Message 类代表实际的消息,例如要通过队列发送的数据。
- 接下来我们打开一个本地文件,这个文件流赋值到消息 BodyStream中。如字符串一样的简单数据你可以使用Send方法的重载形式。
- 最后我们利用消息对了的Send方法发送数据。
从消息队列中接收消息
现在,看一下如何将上面曾发送到队列中的文件读回来:
Dim mq As MessageQueue = New MessageQueue("WIN2000\private$\MyQueue") Dim m As System.Messaging.Message Dim fs As FileStream Dim en As New ASCIIEncoding() Dim data As Integer Dim s As Stream m = mq.Receive(New TimeSpan(0, 0, 3)) s = m.BodyStream fs = File.Create("somepath") While True data = s.ReadByte() If data = -1 Then Exit While End If fs.WriteByte(data) End While s.Close() fs.Close()
- 我们定义类型为MessageQueue 和 Message的变量。
- 接着调用消息队列的 Receive 方法,它精确的匹配队列中的一个消息。同时为receive方法指定超时时间。
- 从接到的消息中读取BodyStream ,并且保存成另一个文件。
作者
Bipin Joshi
Bipin Joshi BinaryIntellect Consulting 的所有者,在那里他提供了许多关于 .NET 技术的训练程序。