我有以下代码:
int openOptions = MQC.MQOO_INQUIRE
+ MQC.MQOO_FAIL_IF_QUIESCING
+ MQC.MQOO_INPUT_SHARED;
执行该命令时出现错误:
com.ibm.mq.MQException:MQJE001:完成代码2,原因2042
MQJE001:完成代码2,原因2042
在将我的Java程序与WebSphere MQ连接时会发生这种情况。请注意,queue属性设置为共享输入。所有帮助表示赞赏。
最佳答案
尽管队列可以设置为DEFSOPT(SHARED)
,但这仅是默认设置。它不会阻止程序以独占方式打开它。特别是,非队列通道的传输队列,命令队列和MQ系统组件使用的其他队列将以独占方式打开,而不管该队列的缺省设置如何。同样,监视程序通常会打开事件队列以供独占使用,以确保其他程序不会竞争消息并导致错过关键事件。
是事件队列还是XMit队列之一?如果是这样,您可能无法在不停止通道或监视代理程序的情况下消除错误。如果它是用户定义的队列,请使用DISPLAY QSTATUS命令查看它为排他输入打开了哪个进程,然后断开该进程的连接。
这是一个例子:
C:\Users\T.Rob>runmqsc QM75
5724-H72 (C) Copyright IBM Corp. 1994, 2011. ALL RIGHTS RESERVED.
Starting MQSC for queue manager QM75.
dis qs(system.admin.command.queue) all
1 : dis qs(system.admin.command.queue) type(handle) all
AMQ8450: Display queue status details.
QUEUE(SYSTEM.ADMIN.COMMAND.QUEUE) TYPE(HANDLE)
APPLDESC(WebSphere MQ Command Server)
APPLTAG(here MQ 7.5\bin\amqpcsea.exe)
APPLTYPE(SYSTEM) BROWSE(NO)
CHANNEL( ) CONNAME( )
ASTATE(NONE) HSTATE(ACTIVE)
INPUT(EXCL) INQUIRE(YES)
OUTPUT(NO) PID(5220)
QMURID(0.0) SET(NO)
TID(1)
URID(XA_FORMATID[] XA_GTRID[] XA_BQUAL[])
URTYPE(QMGR)
对于连接到队列的每个进程,该命令的输出将重复。它显示可执行文件的名称(在本例中为
amqpcsea
,它是命令服务器),打开的类型,进程ID和线程ID。请注意,此处显示INPUT(EXCL)
表示没有其他任何东西可以打开命令队列来浏览或获取消息。