IBMMQ-错误日志:MQJE001: 完成代码为“2”,原因为“2035”。

1.错误日志原文

com.ibm.mq.MQException: MQJE001: 完成代码为“2”,原因为“2035”。
	at com.ibm.mq.MQManagedConnectionJ11.<init>(MQManagedConnectionJ11.java:255)
	at com.ibm.mq.MQClientManagedConnectionFactoryJ11._createManagedConnection(MQClientManagedConnectionFactoryJ11.java:450)
	at com.ibm.mq.MQClientManagedConnectionFactoryJ11.createManagedConnection(MQClientManagedConnectionFactoryJ11.java:487)
	at com.ibm.mq.StoredManagedConnection.<init>(StoredManagedConnection.java:97)
	at com.ibm.mq.MQSimpleConnectionManager.allocateConnection(MQSimpleConnectionManager.java:194)
	at com.ibm.mq.MQQueueManagerFactory.obtainBaseMQQueueManager(MQQueueManagerFactory.java:874)
	at com.ibm.mq.MQQueueManagerFactory.procure(MQQueueManagerFactory.java:822)
	at com.ibm.mq.MQQueueManagerFactory.constructQueueManager(MQQueueManagerFactory.java:764)
	at com.ibm.mq.MQQueueManagerFactory.createQueueManager(MQQueueManagerFactory.java:200)
	at com.ibm.mq.MQQueueManager.<init>(MQQueueManager.java:871)
	at mv.online.agvmanager.modules.mqmanager.until.mq.ibmmqSendTest.initIBMMQSend(ibmmqSendTest.java:69)
	at mv.online.agvmanager.modules.mqmanager.until.mq.ibmmqSendTest.main(ibmmqSendTest.java:165)
java.lang.NullPointerException

2.解决方案

2.1查看一下队列创建和通道创建有没有问题具体方案请查看检查window是否创建用户及队列的标识符

https://blog.csdn.net/weixin_44487579/article/details/128222630?spm=1001.2014.3001.5502

2.2关闭队列通道认证

找到队列->右键属性->选择通道->通道认证记录选择禁用状态->点击应用->点击确认
在这里插入图片描述

在这里插入图片描述

2.3 CMD命令操作

runmqsc mq

alter qmgr chlauth(disabled)

alter qmgr chlauth(enabled)

ALTER QMGR CONNAUTH(' ')  

在执行完上述命令中后,都需要刷新连接认证的缓存,指令如下:

 REFRESH SECURITY TYPE(CONNAUTH)
<think>嗯,用户遇到了IBM MQ的错误,具体是MQJE001完成代码2原因2035。这个问题看起来和权限有关,因为2035通常代表权限不足。我需要回忆一下相关的知识,并结合提供的引用内容来找到解决方案。 首先,根据引用[2]和引用[3],用户是在使用Java客户端连接MQ服务器时遇到这个问题。可能的原因包括客户端配置错误、用户权限不足或者通道设置问题。引用[4]提到可能需要检查程序中的设置,比如事务选项,但这里用户的问题更可能是权限相关的。 接下来,我需要确定原因2035的具体含义。根据IBM MQ文档,2035错误确实是“MQRC_NOT_AUTHORIZED”,即用户没有足够的权限访问队列管理器或队列。这时候应该检查几个方面: 1. **用户认证**:确保客户端连接时使用的用户名和密码正确,并且在MQ服务器上有相应的权限设置。例如,用户是否被授权访问目标队列管理器和队列。 2. **通道权限**:在MQ服务器上,通道的MCAUSER属性可能需要设置为有权限的用户。如果通道的MCAUSER设置为空白或没有权限的用户,客户端连接时可能会被拒绝,导致2035错误。 3. **SSL配置**:如果使用了SSL连接,需要检查证书是否正确安装,并且双方(客户端和服务器)的SSL配置是否匹配。例如,TLS版本是否一致,证书是否过期等。 引用[2]中提到用户在服务器上测试过命令行工具,可能已经排除了服务器端队列和通道的基本问题。但客户端连接时出现问题,可能是在客户端配置或权限设置上存在疏漏。 解决方案方面,可以分步骤进行: - **检查用户权限**:确认连接MQ时使用的用户是否有权限访问队列管理器和目标队列。可能需要使用MQ命令如SET AUTHREC来授权用户。 - **设置通道MCAUSER**:在服务器端,检查通道JAVA.CHANNEL的MCAUSER是否设置为有权限的用户。例如,使用ALTER CHANNEL命令设置MCAUSER为mqm或其他授权用户。 - **验证连接细节**:确保客户端连接时正确指定了队列管理器名称、主机名、端口和通道名称。任何拼写错误或配置错误都可能导致连接失败。 此外,引用[4]提到在程序中可能需要设置MQGetMessageOptions的选项,但如果是权限问题,程序中的事务设置可能不是主要原因,但仍需检查是否正确配置了连接选项,比如是否使用了正确的SSL密码套件等。 总结来说,用户需要从权限和配置两方面入手,逐一排除可能的问题点,确保客户端和服务器端的设置一致且正确。如果问题依旧存在,可能需要查看服务器端的错误日志获取更多详细信息。</think>### 解决方案:MQJE001错误(原因2035)分步解析 #### 错误原因 `2035`原因码表示**权限不足**(MQRC_NOT_AUTHORIZED),通常由以下原因导致: 1. 客户端连接使用的用户无权限访问队列管理器或目标队列[^2][^3] 2. 通道配置未正确设置认证信息(如MCAUSER属性) 3. SSL/TLS证书不匹配或未正确配置 4. 客户端连接参数(队列管理器名称、通道名称、IP/端口)错误 --- #### 解决步骤 1. **检查用户权限** - 在MQ服务器执行以下命令授权用户(示例用户`mquser`): ```bash SET AUTHREC PROFILE('LQ.TEST') OBJTYPE(QUEUE) PRINCIPAL('mquser') AUTHADD(BROWSE,GET,PUT) SET AUTHREC PROFILE('myqm1') OBJTYPE(QMGR) PRINCIPAL('mquser') AUTHADD(CONNECT,INQ) ``` - 验证通道`JAVA.CHANNEL`的MCAUSER设置: ```bash ALTER CHANNEL(JAVA.CHANNEL) CHLTYPE(SVRCONN) MCAUSER('mquser') ``` 2. **验证连接参数** ```java Hashtable<String, Object> props = new Hashtable<>(); props.put(MQConstants.CHANNEL_PROPERTY, "JAVA.CHANNEL"); props.put(MQConstants.HOST_NAME_PROPERTY, "mqserver.example.com"); props.put(MQConstants.PORT_PROPERTY, 1414); props.put(MQConstants.USER_ID_PROPERTY, "mquser"); // 必须与MCAUSER匹配 props.put(MQConstants.PASSWORD_PROPERTY, "secure_password"); ``` 3. **检查SSL配置(若启用)** - 确认客户端与服务端使用相同密码套件: ```java props.put(MQConstants.SSL_CIPHER_SUITE_PROPERTY, "TLS_RSA_WITH_AES_256_CBC_SHA256"); ``` - 验证密钥库路径和密码正确: ```java System.setProperty("javax.net.ssl.keyStore", "client.jks"); System.setProperty("javax.net.ssl.keyStorePassword", "keystore_pass"); ``` 4. **查看服务器端错误日志** ```bash # 在MQ服务器执行 tail -f /var/mqm/qmgrs/myqm1/errors/AMQERR01.LOG ``` --- #### 验证代码片段 ```java MQQueueManager qMgr = new MQQueueManager("myqm1", props); MQQueue queue = qMgr.accessQueue("LQ.TEST", MQConstants.MQOO_INPUT_AS_Q_DEF); MQGetMessageOptions gmo = new MQGetMessageOptions(); gmo.options = MQConstants.MQGMO_WAIT | MQConstants.MQGMO_FAIL_IF_QUIESCING; gmo.waitInterval = 5000; // 5秒等待 MQMessage message = new MQMessage(); queue.get(message, gmo); // 此时应不再报2035错误 ``` --- ### 附加建议 - 使用`blocking read`替代轮询可降低CPU占用[^4] - 事务操作需明确指定`MQC.MQGMO_SYNCPOINT`选项
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值