升级MQ Java客户端至9.3.1.0后遇MQJE001(2,2035)错误求助
问题背景
Java应用从com.ibm.mqjms 6.0.2.2升级到com.ibm.mq.allclient 9.3.1.0后,所有队列消息发送操作报错:
com.ibm.mq.MQException: MQJE001: Completion Code '2', Reason '2035'
队列管理器返回AMQ9557E错误,提示用户ID [username]初始化失败。尝试禁用MQCSP认证的配置未生效:
Hashtable props = new Hashtable(); props.put(MQConstants.USER_ID_PROPERTY, false); props.put(MQConstants.PASSWORD_PROPERTY, false); props.put(MQConstants.USE_MQCSP_AUTHENTICATION_PROPERTY, Boolean.FALSE); this.queueManager = new MQQueueManager(getManager(), props);
附AMQERR01.LOG日志片段:
2023-01-03 13:28:41 - Process(2838.71) User(mqm) Program(amqrmppa) Host([HOSTNAME]) Installation(Installation1) VRMF(9.2.5.0) QMgr(TSTMQ01) Time(2023-01-03T12:28:41.959Z) ArithInsert1(2) ArithInsert2(2035) CommentInsert1([USERNAME]) AMQ9557E: Queue Manager User ID initialization failed for '[USERNAME]'. EXPLANATION: The call to initialize the User ID '[USERNAME]' failed with CompCode 2 and Reason 2035. If an MQCSP block was used, the User ID in the MQCSP block was ''. If a userID flow was used, the User ID in the UID header was '' and any CHLAUTH rules applied prior to user adoption were evaluated case-sensitively against this value. ACTION: Correct the error and try again.
排查步骤
修正客户端配置参数
当前代码中USER_ID_PROPERTY设置为false是错误的,该属性需传入字符串类型的用户ID,而非布尔值。MQ 9.x客户端对参数类型校验更严格,6.x版本可能忽略此错误,但9.x会导致认证逻辑异常。
若要禁用MQCSP认证,只需保留USE_MQCSP_AUTHENTICATION_PROPERTY的设置,移除无效的用户ID和密码参数:Hashtable props = new Hashtable(); props.put(MQConstants.USE_MQCSP_AUTHENTICATION_PROPERTY, Boolean.FALSE); this.queueManager = new MQQueueManager(getManager(), props);检查队列管理器CHLAUTH规则
执行MQSC命令查看通道认证规则,确认是否存在限制[username]或客户端IP的规则:DISPLAY CHLAUTH(*) ALL重点排查
TYPE(USERMAP)或TYPE(ADDRESSMAP)类型的规则,若存在拒绝访问的配置,需调整规则允许目标用户或IP的访问。验证用户权限配置
确认[username]拥有队列管理器和目标队列的必要权限,执行以下MQSC命令:DISPLAY AUTHREC PROFILE(*) PRINCIPAL([username]) OBJTYPE(QMGR) DISPLAY AUTHREC PROFILE(你的目标队列名) PRINCIPAL([username]) OBJTYPE(QUEUE)确保用户至少拥有
CONNECT(队列管理器)和PUT(目标队列)权限,若无对应权限,使用SET AUTHREC命令添加。检查通道MCAUSER设置
查看客户端连接的通道配置,确认MCAUSER属性是否覆盖了客户端传递的用户ID:DISPLAY CHANNEL(你的通道名称) MCAUSER若
MCAUSER已设置,需确保该用户ID拥有对应的访问权限,或根据需求调整MCAUSER配置。确认版本兼容性与补丁情况
当前客户端版本9.3.1.0与队列管理器版本9.2.5.0属于兼容范围,但需检查IBM MQ官方发布说明,确认是否存在认证相关的已知bug,必要时安装对应补丁。启用客户端调试日志
添加JVM参数开启MQ客户端调试日志,追踪认证过程的详细信息:-Dcom.ibm.mq.commonservices.logName=mqclient.log -Dcom.ibm.mq.commonservices.level=DEBUG分析日志中认证流程的细节,确认参数传递是否正确、认证被拒绝的具体原因。
内容的提问来源于stack exchange,提问作者sbrattla

