【问题标题】:com.ibm.mq.MQException: MQJE001: Completion Code '2', Reason '2035'com.ibm.mq.MQException:MQJE001:完成代码“2”,原因“2035”
【发布时间】:2018-07-10 13:35:24
【问题描述】:

我正在构建一个应该能够连接到 IBM WebSphere MQ 队列管理器的 Java 应用程序,但我不明白为什么我不断收到此错误。

我已经通过 MQ Explorer 使用 setmqaut 为我的用户 ID 授予了管理权限。我还在我的频道中定义了MCAUSER,并将用户与 MQ Windows 组相关联。

谁能提供一个简短的教程/示例,说明如何在 Windows 环境中将 Java 程序与 WebSphere MQ 安装连接起来?

【问题讨论】:

  • 什么版本的WMQ服务器和客户端?

标签: java windows ibm-mq


【解决方案1】:

如果您在频道中设置了MCAUSER,那么这会覆盖客户端提供的任何 ID。如果您仍然获得 2035,那么有两种可能性。首先是MCAUSER 中的ID 没有使用setmqaut 命令正确授权。第二个(至少对于 Windows)是它不是正确的 ID。例如,如果通道定义有MCAUSER(userx) 而不是MCAUSER('userx@domain'),那么提供的 ID 完全有可能与 WMQ 解析的 SID 不同。当在笔记本电脑和 WMQ 服务器上定义 userx 时,可能会发生这种情况。服务器必须能够解析提供给它的 SID 的 ID。

WMQ v7.1 有关于 CHLAUTH 规则的其他注意事项。如果提供的 ID 具有管理权限,WMQ 将默认在所有通道上阻止它。这是因为管理 ID 具有对 WMQ 的完全访问权限,并且可以使用 WMQ 服务或触发功能在 QMgr 的主机服务器上远程执行代码。因此,如果您拥有 WMQ v7.1,您要么需要在所需通道上启用 WMQ 管理员访问权限,要么使用非管理员用户 ID 进行连接。

最后,调试所有这些的最简单方法是在 QMgr 上启用授权事件并将SupportPac MS0P 安装到 WMQ Explorer 中。这将在每次出现 2035 时生成一条事件消息,然后 MS0P 插件会将其解析为人类可读的格式。消息会告诉你...

  • 什么 API 调用失败。 (CONNECT, OPEN, CLOSE)
  • API 调用中指定的选项
  • 进行 API 调用的 ID
  • 对其进行 API 调用的对象

这有助于确定您是否提供了所有正确的权限。例如,Java 和 JMS 类将查询它们接触的每个对象。这就是他们在连接时发现 DLQ 名称或在打开队列时发现 BOQNAME 的方式。因此,如果您没有在 QMgr 和队列中提供 +inq,您将获得 2035,并且事件消息将显示您使用的对象和选项。类似地,如果您阅读了一条有害消息并且该 ID 没有回退队列或死队列的权限,那么您会得到一个 2035,它出现在您拥有的队列上(直到您查看事件消息)一直在愉快地消费消息。所以请务必启用 Auth 事件并使用 MS0P。

如果您想要一个关于 WMQ 安全性的友好教程,有几个会议演示文稿已存档 here

【讨论】:

  • 我正在尝试将构造函数 (java) PCFMessageAgent(String host, int port, String channel) 与 SVRCONN 通道一起使用,但我收到此错误 com.ibm.mq.MQException: MQJE001: Completion代码“2”,原因“2035”。我尝试连接的频道是 SYSTEM.DEF.SVRCONN。为什么我会收到错误消息。
  • 在 MQ 标签中搜索 2035。我已经提供了几个关于如何使用错误日志和身份验证事件消息来诊断身份验证错误的答案。如果这些没有帮助,请发布一个新问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-07
  • 1970-01-01
  • 1970-01-01
  • 2011-06-27
  • 1970-01-01
相关资源
最近更新 更多