常见问题及解答
本文档包含有关 IBM MQ on Cloud 服务用户迂到的常见问题或问题的信息。 本文档旨在回答问题或提供有关如何解决问题的指示信息,而无需提交支持凭单。
尝试诊断队列管理器的问题时,首先应该查看队列管理器日志。 您可以在下载队列管理器日志和诊断页面上找到有关如何下载队列管理器日志的信息。
内容:
- 客户机应用程序在尝试连接到队列管理器时,尽管提供了有效的用户标识和密码,也会收到“未经授权”响应
- 客户机应用程序或队列管理器无法连接到新创建的通道
- 尝试管理队列管理器时,发生 MQRCCF_ACCESS_BLOCKED (3382)
- 尝试连接到队列管理器时,发生 MQRC_MAX_CONNS_LIMIT_REACHED (2025)
- 无法将消息放入名称不以“DEV.”开头的队列
客户机应用程序在尝试连接到队列管理器时,尽管提供了有效的用户标识和密码,也会收到“未经授权”响应
尝试将客户机应用程序连接到 IBM MQ on Cloud 队列管理器时,您会收到指示用户未成功认证的返回码,例如以下一个或多个返回码;
- 在 MQ Explorer 中,
Access not permitted. You are not authorised to perform this operation (AMQ4036)
- 在 JMS 或 Java 应用程序中,显示
MQRC_NOT_AUTHORIZED
(2035) AMQ9791E: The client application did not supply a user ID and password.
第一个说明
IBM MQ on Cloud 队列管理器的缺省配置指定连接到队列管理器的任何应用程序都必须提供有效的用户凭证。 用户和应用程序可以通过遵循用户和应用程序文档页面中的指示信息来创建凭证。
IBM MQ 客户机应用程序有两种不同的方法向队列管理器提供凭证,具体使用哪种方法通过名为compatibility mode
的开关进行控制。 您必须确保应用程序进行连接时,应用程序的兼容性方式已禁用,否则密码的前 8 个字符(长 API 密钥)会传输到队列管理器,导致认证检查失败。
使用低于 V8.0.0.0 的 IBM MQ 客户机库进行连接的客户机应用程序无法使用此更新的方法向队列管理器提供长用户凭证,因此无法进行连接。
第一个解决方案
使用 MQ 资源管理器进行连接时,必须取消选中User identification compatibility mode
的选项,该选项可在连接向导的User Identification details
页面中找到。
Java 或 JMS 应用程序可以禁用兼容性方式标志,如下所示:
- 确保使用的 IBM MQ 客户机库是 V8.0.0.0 或更高版本
- 确保客户机应用程序以
MQCSP
结构提供有效的用户凭证。 有关MQCSP
结构的更多信息,请参阅此处的 Knowledge Center - 如此 Knowledge Center 页面中所述禁用兼容性方式 - 例如,通过设置
JmsConstants.USER_AUTHENTICATION_MQCSP = true
或通过等效的 ConnectionFactory 设置来禁用兼容性方式
连接到 IBM MQ 的其他产品通常提供使用其自己的管理接口来配置此设置的机制:
第二个解释
管理员凭证和应用程序凭证的授权级别不同,因此不可互换。 管理员凭证可以用于:
- 使用 MQ Web 控制台连接到队列管理器
- 使用 MQ 资源管理器连接到队列管理器
- 使用 runmqsc 连接到队列管理器
- 使用管理 REST API 连接到队列管理器
- 使用配置为使用
CLOUD.ADMIN.SVRCONN
通道的客户机连接到队列管理器
应用程序凭证可以用于:
- 使用消息传递 REST API 连接到队列管理器
- 使用配置为使用
CLOUD.APP.SVRCONN
通道的客户机连接到队列管理器
第二个解决方案
如果执行 MQ 管理任务,请使用管理员凭证
如果连接客户机应用程序,请使用应用程序凭证
客户机应用程序或队列管理器无法连接到新创建的通道
尝试通过最近创建的通道将客户机应用程序或队列管理器连接到 IBM MQ on Cloud 队列管理器时,您会收到返回码 MQRC_NOT_AUTHORIZED
(2035) ,并且客户机无法连接。 此外,还会输出标题为 AMQ9777E: Channel was blocked
的错误消息。
说明
IBM MQ on Cloud 队列管理器的缺省配置将创建通道认证规则,该规则将阻塞除与通道 CLOUD.ADMIN.SVRCONN
和 CLOUD.APP.SVRCONN
的连接以外的所有连接。 如果创建了新通道,不会有客户机能够通过该通道进行连接,因为通道认证规则 CHLAUTH('*') TYPE(ADDRESSMAP) ADDRESS('*') USERSRC(NOACCESS)
会阻止客户机
解决方案
要解决此问题,请创建新的通道认证规则,以允许访问您的通道。 例如,如果您有名为 QM.ENTRY
的通道,请创建具有以下值的通道认证规则:
SET CHLAUTH('QM.ENTRY') TYPE(ADDRESSMAP) ADDRESS('*') USERSRC(CHANNEL)
或者,可以使用 MQ 控制台来创建通道认证规则:
-
浏览至队列管理器的 "管理" 选项卡。
-
确保选择 "MQ 控制台" ,然后单击 启动 MQ 控制台
-
单击侧边菜单中的“管理”以查看 MQ 对象。
-
单击右上角的 "查看配置"。
-
单击 "安全性" 选项卡和 "通道认证" ,然后单击 创建。
-
从 "规则类型" 下拉菜单中,选择
Allow
。 选择规则类型后,您将能够选择标识-选择Address
。 -
在以下页面上,添加通道名称,例如
QM.ENTRY
。 在 "地址" 文本框中,添加*
。 通过单击 创建 按钮完成。 -
现在,您应该会看到包含您的通道名称的新通道认证记录。
尝试管理队列管理器时,发生 MQRCCF_ACCESS_BLOCKED (3382)
尝试在 IBM MQ on Cloud 队列管理器中定义,删除或变更对象时,管理客户机接收到 MQRCCF_ACCESS_BLOCKED
(3382) 返回码。 在客户机运行 IBM MQ V9.0.3 或更低版本时,您可能会收到返回码 MQRC_UNEXPECTED_ERROR
(2195)
此外,将输出标题为 AMQ7355E: Object <Object name>, object type <Object type>, is locked to remote users.
的错误消息
说明
已对 IBM MQ on Cloud的用户禁用 IBM MQ 的某些功能。 禁用这些功能的目的是为了防止意外禁用队列管理器或潜在滥用服务。 您可能会看到某些锁定的属性已分配有值,这些值是自动分配的,无法进行更改。
如果尝试定义、更改或删除已禁用的对象或属性,那么队列管理器会阻止这类操作,并显示返回码 MQRCCF_ACCESS_BLOCKED
(3382)。 在 IBM MQ V9.0.3 上添加了此返回码,版本低于 V9.0.3 的客户机将无法识别此返回码,因此可能会改为返回 MQRC_UNEXPECTED_ERROR
(2195)。
以下功能已禁用:
- 以下队列管理器属性:
CONNAUTH
、CHADEXIT
、CLWLEXIT
、CLWLDATA
、SSLCRYP
和SSLKEYR
- Authentication information objects of type
IDPWOS
&IDPWLDAP
- 以下通道属性:
MSGEXIT
、MSGDATA
、SCYEXIT
、SCYDATA
、SENDEXIT
、SENDDATA
、RCVEXIT
和RCVDATA
Listener
。Service
。 *注:*可以启动或停止现有 service 对象。Process
。- 以下队列属性:
PROCESS
COMMINFO
。
尝试连接到队列管理器时,发生 MQRC_MAX_CONNS_LIMIT_REACHED (2025)
尝试将客户机应用程序或队列管理器连接到 IBM MQ on Cloud 队列管理器时,您会收到返回码 MQRC_MAX_CONNS_LIMIT_REACHED
(2025) ,并且客户机无法连接。
此外,将输出标题为 AMQ9694E: Program cannot connect because connection limit reached.
的错误消息
说明
IBM MQ on Cloud 根据大小对队列管理器资源应用限制。 创建新的队列管理器时,有关每个队列管理器大小的信息中详细描述了每个限制的值以及限制的内容。
应用于队列管理器的其中一个限制是并发客户机连接数,此限制会应用于客户机应用程序和客户机队列管理器。 如果尝试超过允许的连接数,那么将阻止您的客户机应用程序,并显示返回码 MQRC_MAX_CONNS_LIMIT_REACHED
(2025),同时会在队列管理器日志中显示 AMQ9694E
错误消息。
由于 JMS 使用两个客户机连接来传递消息,因此您需要注意,如果队列管理器连接限制为 10 ,那么在达到连接限制之前,只能将 5 JMS 客户机连接到队列管理器。
解决方案
要解决此问题,请执行以下操作:
- 断开不必要的客户机连接,以允许更新的客户机进行连接
- 将队列管理器升级到更大的大小,以允许更多客户机连接
为了在接近队列管理器客户机连接限制时让您了解这一情况,队列管理器会在达到允许客户机连接数的 80% 时,在队列管理器日志中输出 AMQ7358W
错误消息。
无法将消息放入名称不以“DEV.”开头的队列
尝试向名称不以“DEV”开头的新队列发送消息时,会收到下列其中一条错误消息:
JMSWMQ2007: Failed to send a message to destination '[YOUR QUEUE NAME]'
MQRC_NOT_AUTHORIZED (2035)
.
说明
IBM MQ on Cloud 队列管理器的缺省配置是针对所有初始队列分配权限记录,允许用户和应用程序发送和接收消息。 所有以 "DEV." 开头的队列和主题都配置为允许发送和接收消息。
如果已创建其名称不以 "DEV" 开头的新队列或主题,那么预定义的授权记录将不适用。 因此,应用程序不会具有向此队列或主题发送消息或从中接收消息所必需的许可权。
解决方案
要解决此问题,请使用下列其中一种方法。
-
使用
runmqsc
来运行以下命令:SET AUTHREC PROFILE('TEST.QUEUE') OBJTYPE(QUEUE) GROUP('demoapp') AUTHADD(PUT,GET,BROWSE,INQ)
SET AUTHREC PROFILE('TEST.QUEUE') OBJTYPE(TOPIC) GROUP('demoapp') AUTHADD(SUB,PUB)
将 "test.queue "替换为队列的名称。" demoapp " 会使用应用程序用户名。 如果您希望,可以通过指定组“mqwriter”,向对象授予对所有已连接应用程序的访问权。
-
通过 Web 控制台:
- 选择新队列,然后在屏幕顶部的三个点下选择“配置”。
- 选择“安全性”,然后单击“添加 +”。
- 选择“组”,然后输入名称“mqwriter”作为“组名”。 勾选“MQI”复选框,并确保仅选中 MQI 下的框。
- 单击“创建”按钮。