2012-12-20 253 views
2

我有以下代码:IBM WebSphere MQ的2042错误

int openOptions = MQC.MQOO_INQUIRE 
    + MQC.MQOO_FAIL_IF_QUIESCING 
    + MQC.MQOO_INPUT_SHARED; 

执行时,以下哪,我得到一个错误:

com.ibm.mq.MQException: MQJE001: Completion Code 2, Reason 2042 MQJE001: Completion Code 2, Reason 2042

这发生在连接我与WebSphere MQ Java程序。请注意,队列属性被设置为输入共享。所有帮助赞赏。

回答

2

尽管队列可能设置为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),表示没有别的东西可以打开命令队列来浏览或获取消息。

+0

那么应该怎么做,我该如何消除这个错误? – abhinav

+0

它是事件还是XMit队列之一?如果是这样,您可能无法在不停止通道或监控代理的情况下删除错误。如果它是用户定义的队列,请使用['DISPLAY QSTATUS'](http://publib.boulder.ibm.com/infocenter/wmqv7/v7r0/topic/com.ibm.mq.csqzaj.doc/sc12260_。 htm)命令查看哪个进程打开了独占输入,然后断开该进程。 –

+0

亲爱的抢劫,我正在尝试,但无法得到命令,你能帮我吗? – abhinav