我有一个应用程序试图将消息放入远程队列管理器上的队列(LOG.TRANSACTION.IN)。消息最终以2035失败并被置于本地队列管理器上的DLQ上。在本地队列管理器(QMLOCAL)上,应用程序将消息直接放在SCTQ上,因为没有远程队列定义。应用程序在具有MQ完全访问权限的ID下运行。我知道这不太理想,但这是另一个讨论。我们在远程端(QMREMOTE)上的clusrcvr通道上有一个mcauser,它已被授予访问本地队列的权限。我以为我已经解决了安全问题,但事实并非如此。这是安全信息
QMLOCAL:
Entity application_id has the following authorizations for object SYSTEM.CLUSTER.TRANSMIT.QUEUE:
get
browse
put
inq
set
crt
dlt
chg
dsp
passid
passall
setid
setall
clr
QMREMOTE:
Entity MY_MCAUSER has the following authorizations for object LOG.TRANSACTION.IN:
put
crt
setall
对此的任何帮助将不胜感激。
答案 0 :(得分:2)
这里有一些可能性。由于消息最终在DLQ中,因此我们知道问题出在远程端。如果您的推送应用程序生成了2035,则该消息将永远不会被放置。
这意味着CLUSRCVR通道中的MCAUSER就是问题所在。为了使它工作,它需要具有以下(假设MY_MCAUSER在组mqmmca中):
setmqaut -m QMREMOTE -g mqmmca -t qmgr -all +connect +inq +setall
setmqaut -m QMREMOTE -g mqmmca -n 'LOG.TRANSACTION.IN' -t queue -all +put +setall
与您的2035无关,该频道也需要
setmqaut -m QMREMOTE -g mqmmca -n 'SYSTEM.CLUSTER.COMMAND.QUEUE' -t queue -all +put +setall
只是为了在集群中运行。根据您的版本,MCAUSER频道可能还需要访问SYSTEM.CHANNEL.SYNCQ
(v7版本)。
一种简单明了的方法是启用授权事件
ALTER QMGR AUTHOREV(ENABLED)
授权事件会告诉您失败的ID,失败的对象(QMgr,队列等),正在进行的API调用以及使用的选项。
然后将SupportPac MS0P安装到WMQ Explorer中。这会将二进制PCF事件消息格式化为人类可读的形式,这将是非常明显的问题是什么。
在这种情况下,很可能a)MCAUSER在QMgr上缺少+ setall或者b)它是v7而且MCAUSER缺少对S.C.SQ的适当许可,如上所述。
答案 1 :(得分:0)
答案 2 :(得分:0)
你也可以解决这个问题通过设置mcauser('mqm')..我能够克服2035错误。
Define channel (channel1) chltype (svrconn) trptype (tcp) mcauser(‘mqm’)
Esp thanx到我的Bilal Ahmad(PSE)