Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ibm mq WebSphereMQQ程序使用_Ibm Mq - Fatal编程技术网

Ibm mq WebSphereMQQ程序使用

Ibm mq WebSphereMQQ程序使用,ibm-mq,Ibm Mq,我使用以下MQSC命令创建了队列管理器QM_测试: SET AUTHREC OBJTYPE(QMGR) GROUP('mq-user') AUTHADD(INQ,DSP,CONNECT,SET,SETALL) SET AUTHREC PROFILE(SYSTEM.MQEXPLORER.REPLY.MODEL) OBJTYPE(QUEUE) GROUP('mq-user') AUTHADD(INQ,DSP,GET) SET AUTHREC PROFILE(SYSTEM.ADMIN.CO

我使用以下MQSC命令创建了队列管理器QM_测试:

  SET AUTHREC OBJTYPE(QMGR) GROUP('mq-user') AUTHADD(INQ,DSP,CONNECT,SET,SETALL)
  SET AUTHREC PROFILE(SYSTEM.MQEXPLORER.REPLY.MODEL) OBJTYPE(QUEUE) GROUP('mq-user') AUTHADD(INQ,DSP,GET)
  SET AUTHREC PROFILE(SYSTEM.ADMIN.COMMAND.QUEUE) OBJTYPE(QUEUE) GROUP('mq-user') AUTHADD(INQ,DSP,PUT)
  DEFINE CHANNEL ($cname) CHLTYPE (SVRCONN) TRPTYPE (TCP) MCAUSER('tcs-mq-user') REPLACE
  SET CHLAUTH($cname) TYPE(ADDRESSMAP) ADDRESS(*) MCAUSER('tcs-mq-user')
  DEFINE QLOCAL ($dlqname) REPLACE
  SET AUTHREC PROFILE($dlqname) OBJTYPE(QUEUE) GROUP('mq-user') AUTHADD(ALL)
  ALTER  QMGR DEADQ($dlqname) FORCE
  DEFINE LISTENER ($lname) TRPTYPE (TCP) CONTROL (QMGR) PORT ($port)
  START LISTENER ($lname)
我使用以下方法创建了两个队列TEST1和TEST2:

DEFINE QLOCAL ($qname) GET(ENABLED) PUT(ENABLED) MAXDEPTH($maxdepth) REPLACE
SET AUTHREC PROFILE($qname) OBJTYPE(QUEUE) GROUP('mq-user') AUTHADD(ALL)
我正在尝试使用q程序实用程序将消息从TEST1复制到TEST2:

q-xb-mQM_测试-iTEST1-mQM_测试-oTEST2-p20

但是我得到了这个错误:

Paul Clarke的MQSeries Q计划[V6.0.0版本:2012年5月2日] 连接…失败。对象“QM_TEST”上的MQCONNX返回2035未返回 授权的


我正在运行WebSphereMQV7.1。服务器上安装了q SupportPac,我正在服务器上执行q命令。我想不出一种方法来通过通道名测试,即通道和端口号1414,这就是问题所在吗

程序通过共享内存而不是使用SVRCONN通道以绑定模式连接到QMgr。您可以通过
ALTER QMGR AUTHOREV(ENABLED)
然后查看在QMGR事件队列中生成的授权事件来验证这一点。如果已安装,则可以右键单击队列并选择“格式化事件消息”,以人类可读的格式查看它。无论采用哪种方式,您都应该看到,用于连接的ID不是
tcs mq user
,而是用于运行Q程序的任何ID。尝试:

q -lmqic -xc -iTEST1 -oTEST2 -p20
当使用
-xc
运行时,程序将提示您频道详细信息

Q程序可以将队列转储到文件中,但它不是为此而设计的。来自的QLoad程序就是为此而设计的,它将捕获消息的所有方面,如果您获得适当授权,还将完整地恢复它们。这包括消息ID、时间戳等

最后,简要介绍一下您文章中的
AUTHREC
语句。由于您费心创建了一个低权限的
MCAUSER
,并为其设置了权限,因此我猜想您希望该ID不具有管理权限。请注意,在QMgr上授予用户
+set
+setall
,允许他们使用WMQ Explorer或任何其他使用PCF命令的工具来管理授权记录。考虑对QMGR的权限限制:<代码> +DSP+Inq+Connect < /C> > 通常,应用程序不会访问DLQ,而是访问特定于应用程序的回退队列。如果该应用程序被授予访问DLQ的权限,它通常只是将消息放在那里,而不是将它们放回去。这是因为DLQ是一个系统范围的资源,如果QMgr是共享的,则来自多个应用程序的消息可能会到达DLQ。作为安全预防措施,将该队列上的删除权限限制为管理员。这样,在应用程序清理后,用户就不会意外(或以其他方式)删除属于其他应用程序的消息

更新:
回顾你的帖子,我注意到另一个差异。我假设您收到2035授权错误,因为您在绑定模式下使用的ID不是
mqm
tcs mq user
。再次查看后,我意识到您从未授权
mq user
组访问您试图访问的队列。您已将其授权给此场景中未使用的命令队列和应答模型。(WMQ Explorer使用它们。)因此,添加以下规则:

SET AUTHREC PROFILE(TEST1) OBJTYPE(QUEUE) GROUP('mq-user') AUTHADD(PUT,GET,INQ,BROWSE)
SET AUTHREC PROFILE(TEST2) OBJTYPE(QUEUE) GROUP('mq-user') AUTHADD(PUT,GET,INQ,BROWSE)
如果您实际上是以
tcs mq用户的身份连接,这将解决身份验证问题

据我所知,没有办法在命令行上将通道传递给Q,但它确实接受标准。例如:

export MQSERVER="$cname/TCP/localhost($port)"
…其中,
$cname
是频道名称,
$port
是端口。这是我的测试:

tcs-mq-user:~> export MQSERVER="TEST.SVRCONN/TCP/localhost(1414)"
tcs-mq-user:~> q -xb -iTEST1 -mQMTEST -lmqic
MQSeries Q Program by Paul Clarke [ V6.0.0 Build:May  2 2012 ]
Connecting ...connected to 'JMSDEMO'.
No more messages.
tcs-mq-user:~> 
至于为什么找不到客户端libs,您是否安装了它们

tcs-mq-user:~> rpm -qa | grep MQSeriesClient
MQSeriesClient-7.5.0-0

程序通过共享内存而不是使用SVRCONN通道以绑定模式连接到QMgr。您可以通过
ALTER QMGR AUTHOREV(ENABLED)
然后查看在QMGR事件队列中生成的授权事件来验证这一点。如果已安装,则可以右键单击队列并选择“格式化事件消息”,以人类可读的格式查看它。无论采用哪种方式,您都应该看到,用于连接的ID不是
tcs mq user
,而是用于运行Q程序的任何ID。尝试:

q -lmqic -xc -iTEST1 -oTEST2 -p20
当使用
-xc
运行时,程序将提示您频道详细信息

Q程序可以将队列转储到文件中,但它不是为此而设计的。来自的QLoad程序就是为此而设计的,它将捕获消息的所有方面,如果您获得适当授权,还将完整地恢复它们。这包括消息ID、时间戳等

最后,简要介绍一下您文章中的
AUTHREC
语句。由于您费心创建了一个低权限的
MCAUSER
,并为其设置了权限,因此我猜想您希望该ID不具有管理权限。请注意,在QMgr上授予用户
+set
+setall
,允许他们使用WMQ Explorer或任何其他使用PCF命令的工具来管理授权记录。考虑对QMGR的权限限制:<代码> +DSP+Inq+Connect < /C> > 通常,应用程序不会访问DLQ,而是访问特定于应用程序的回退队列。如果该应用程序被授予访问DLQ的权限,它通常只是将消息放在那里,而不是将它们放回去。这是因为DLQ是一个系统范围的资源,如果QMgr是共享的,则来自多个应用程序的消息可能会到达DLQ。作为安全预防措施,将该队列上的删除权限限制为管理员。这样,在应用程序清理后,用户就不会意外(或以其他方式)删除属于其他应用程序的消息

更新:
回顾你的帖子,我注意到另一个差异。我假设您收到2035授权错误,因为您在绑定模式下使用的ID不是