MSMQ的VB操作代码/步骤
1、安装MSMQ,获得Microsoft Message Queue 2.0 Objtec Libary
在VB中添加类型库引用
2、声明需要用到的变量
Dim msgqueue As MSMQQueue '--队列
Dim queryObj As MSMQQuery '--查询
Dim queueInfo As MSMQQueueInfo '--队列信息
Dim msg As MSMQMessage
3、创建(私有队列,本机上的)
Set queueInfo = New MSMQQueueInfo
queueInfo.PathName = "./Private$/in"
queueInfo.Label = "InQueue"
queueInfo.Create '--创建队列
4、发送消息(假设消息队列已经创建)
Set queueInfo = New MSMQQueueInfo
queueInfo.PathName = "./Private$/in"
' queueInfo.Label = "InQueue"
Set msgqueue = queueInfo.Open(MQACCESS.MQ_SEND_ACCESS, MQSHARE.MQ_DENY_NONE)
If (msgqueue.IsOpen()) Then
Set msg = New MSMQMessage
msg.Label = "hi"
msg.Body = "This is a msg test" '--可以是任何变量,只要支持Idispatch接口和持续化接口
msg.Send msgqueue
msgqueue.Close
Debug.Print "Sended!"
End If
5、主动接受消息(注意这是一个阻塞操作)
Set queueInfo = New MSMQQueueInfo
queueInfo.PathName = "./Private$/in"
' queueInfo.Label = "InQueue"
Set msgqueue = queueInfo.Open(MQACCESS.MQ_RECEIVE_ACCESS, MQSHARE.MQ_DENY_NONE)
If (msgqueue.IsOpen()) Then
Set msg = msgqueue.Receive
Debug.Print "recvied!" & msg.Body
End If
6、也可以采用MSMQ事件来进行消息通告
Dim WithEvents evt As MSMQEvent
Dim queueInfo As MSMQQueueInfo
Dim q As MSMQQueue
Dim msg As MSMQMessage
Private Sub Form_Load()
Set queueInfo = New MSMQQueueInfo
queueInfo.PathName = "./Private$/in"
'queueInfo.Label = "InQueue"
Set q = queueInfo.Open(MQACCESS.MQ_RECEIVE_ACCESS, MQSHARE.MQ_DENY_NONE)
Set evt = New MSMQEvent
q.EnableNotification evt
End Sub
Private Sub evt_Arrived(ByVal q As Object, ByVal cursor As Long)
' Dim b As Boolean
Dim theq As MSMQQueue
Set theq = q
Set msg = theq.Receive()
Debug.Print msg.Label + " body:" + msg.Body
theq.EnableNotification evt
End Sub
注意其中的 Dim WithEvents evt As MSMQEvent 语句
7、意义
可以异种程序的跨进程消息交换,甚至vb程序同.net程序的交互
如果配置成企业MSMQ,可以构成分布消息处理系统,对于大型应用很有利