升级MQ Classes for Java至9.3后出现2035 MQRC_NOT_AUTHORIZED错误求助
MQ Classes for Java 9.3升级后连接旧MQ服务器报2035的解决方案
问题根源
IBM在MQ Classes for Java 9.x系列版本中收紧了认证逻辑,默认会自动向MQ服务器提交客户端的身份信息(比如当前操作系统用户)。而你的第一台MQ服务器仅靠网络访问限制做防护,没有配置对应的身份授权策略,导致升级后的客户端提交的身份未被认可,触发2035 MQRC_NOT_AUTHORIZED错误。
可落地的解决办法
- 强制客户端不提交身份信息:在连接第一台MQ服务器的代码里,显式设置用户ID为空字符串,比如:
这样客户端会回到v6版本的无身份提交模式,适配旧服务器的配置。MQEnvironment.userID = ""; // 或者用连接属性设置 Hashtable<String, Object> props = new Hashtable<>(); props.put(WMQConstants.USERID_PROPERTY, ""); MQQueueManager qmgr = new MQQueueManager("QMGR_NAME", props); - 调整旧MQ服务器的通道认证规则:通过MQSC命令修改通道配置,允许匿名连接。例如:
生产环境建议配置更严格的地址映射规则,仅允许你的应用IP匿名访问:-- 临时关闭通道认证(适合测试环境) ALTER CHANNEL(YOUR_CHANNEL_NAME) CHLAUTH(DISABLED)SET CHLAUTH(YOUR_CHANNEL_NAME) TYPE(ADDRESSMAP) ADDRESS(APP_SERVER_IP) USERSRC(CHANNEL) CHCKCLNT(ASQMGR) - 检查连接工厂的默认配置:如果用的是JMS连接工厂,确保没有默认填充用户ID属性,手动清空对应配置项。
验证要点
- 修改配置后重启应用,测试连接第一台MQ服务器是否恢复正常
- 确认第二台需要TLS1.3和客户端证书的服务器连接不受影响
- 查看MQ服务器的错误日志,确认2035错误不再出现
内容的提问来源于stack exchange,提问作者abinkleysf
相关产品推荐
相关产品推荐

