使用PHP打开MSMQ队列

4
我有一个样本PHP脚本,用于连接到Windows上的MSMQ。我可以创建队列并将消息发送到队列中,但是当我尝试打开队列以读取消息时,我一直收到访问被拒绝的异常。代码在这里:http://pastebin.com/S5uCiP2Z
我认为主要问题是


$READ = $MSMQInfo->Open(2,0);

我不确定2,0选项代表什么(我在任何地方都找不到这些选项的参考 - 我从另一个示例中得到了该代码)。查看MSMQQueueInfo.open文档,我可以看到一些选项,但没有数字选项。

非常感谢您的帮助。与MSMQ集成的原因是在系统之间提供临时解决方案,我们的旧系统使用MSMQ,所以我需要有这个接口。

谢谢

1个回答

3

这里你已经知道参数是:

Function Open(Access, ShareMode)

他们还说:

可以将访问权限设置为以下之一:

MQ_PEEK_ACCESS:只能查看消息。不能从队列中删除它们。

MQ_SEND_ACCESS:只能向队列发送消息。

MQ_RECEIVE_ACCESS:可以检索(读取和删除)队列中的消息,也可以预览或清除它们。有关限制谁可以从队列中检索消息的信息,请参见 ShareMode 参数的说明。

MQ_PEEK_ACCESS | MQ_ADMIN_ACCESS:只能预览本地传出队列中的消息(读取而不从队列中删除)。

MQ_RECEIVE_ACCESS | MQ_ADMIN_ACCESS:可以检索本地传出队列中的消息(读取并从队列中删除)、预览(读取而不从队列中删除)或清除(删除)。

在 MSDN 的 MQACCESS 文档中,他们为常量提供了数字值:

typedef  enum 
{
  MQ_RECEIVE_ACCESS = 1,
  MQ_SEND_ACCESS = 2,
  MQ_PEEK_ACCESS = 0x0020,
  MQ_ADMIN_ACCESS = 0x0080
} MQACCESS;

第二个参数,ShareMode:

ShareMode指定谁可以访问队列。设置为以下之一:

MQ_DENY_NONE:默认设置。队列对Everyone组中的所有成员都可用。如果Access设置为MQ_PEEK_ACCESS或MQ_SEND_ACCESS,则必须使用此设置。

MQ_DENY_RECEIVE_SHARE:限制可以从队列检索消息的进程。如果另一个进程已经打开了该队列以检索消息,则此调用失败并生成MQ_ERROR_SHARING_VIOLATION(0xC00E0009)错误。仅适用于Access设置为MQ_RECEIVE_ACCESS时。

这些常量是:

Const MQ_DENY_NONE = 0
Const MQ_DENY_RECEIVE_SHARE = 1

确实有点难找,但你可以在这里找到,这不是很可靠的来源,但我相信它是正确的。


我现在可以读取队列中的第一条消息了,谢谢 :) 不需要迭代 receive() 来获取每个消息。 - Scott-David Jones

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接