骨のダイスを転がそう

2009|01|02|03|04|05|06|07|10|12|
2010|01|02|03|04|05|06|07|08|09|10|11|
2011|02|03|05|06|07|08|09|10|11|12|
2012|01|02|04|05|09|10|11|12|
2013|01|02|04|
2014|11|
2015|01|04|05|
2016|06|07|08|09|11|
2017|01|02|03|04|
2018|03|

2010-01-12

_ [ msmq ] メッセージキューを VBS から動かしてみる。

メッセージキューイングを試してみたくなった。

Const MQ_RECEIVE_ACCESS      = 1
Const MQ_SEND_ACCESS         = 2
Const MQ_PEEK_ACCESS         = 32
Const MQ_ADMIN_ACCESS        = 128
Const MQ_DENY_NONE           = 0
Const MQ_DENY_RECEIVE_SHARE  = 1

Dim objQueueInfo
Set objQueueInfo = CreateObject("MSMQ.MSMQQueueInfo")

Dim objMessage
Set objMessage   = CreateObject("MSMQ.MSMQMessage")

objQueueInfo.PathName = ".\private$\input"

Dim objDest
Set objDest = objQueueInfo.Open(MQ_SEND_ACCESS ,MQ_DENY_NONE)

If objDest.IsOpen = 1 Then
	objMessage.Priority = 4
	objMessage.Label = "msg" & date & time
	objMessage.Body  = "メッセージボディ"
	objMessage.Send objDest, 3
End If

objDest.Close

Set objDest      = Nothing
Set objMessage   = Nothing
Set objQueueInfo = Nothing

って、http://blogs.technet.com/junichia/archive/2008/06/27/idm-msmq-3-msmq.aspx で紹介されているサンプルスクリプトそのままだけど、Windows Server 2008 環境ということで、手元の WinXP では動かない。  objMessage.Send objDest の後に、3 が必要だった。Send メソッドのデフォルト値が変わったのか?

Const MQ_RECEIVE_ACCESS     = 1
Const MQ_SEND_ACCESS        = 2
Const MQ_PEEK_ACCESS        = 32
Const MQ_ADMIN_ACCESS       = 128
Const MQ_DENY_NONE          = 0
Const MQ_DENY_RECEIVE_SHARE = 1

Set objQueueInfo_Input = CreateObject("MSMQ.MSMQQueueInfo")
Set objMsgQueue_Src    = CreateObject("MSMQ.MSMQQueue")
Set objMessage         = CreateObject("MSMQ.MSMQMessage")
Set objManagement      = CreateObject("MSMQ.MSMQManagement")

objManagement.Init "" ,".\private$\Input"
objQueueInfo_Input.Formatname  = "DIRECT=OS:tca6006\private$\Input"

Set objMsgQueue_Src = objQueueInfo_Input.Open(MQ_Receive_ACCESS ,MQ_DENY_NONE)

If objManagement.MessageCount > 0 then
    wscript.echo objManagement.MessageCount & " 件のメッセージがあります"
    Set objMessage = objMsgQueue_Src.Receive()
	Wscript.Echo "本文:" & objMessage.Body
Else
    Wscript.echo "メッセージがありません"
End If

これでメッセージを取り出せる。おもしろい。