java - com.ibm.mq.MQException : MQJE001: Completion Code '2' , 原因 '2035'

标签 java windows ibm-mq

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

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

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

最佳答案

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

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

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

  • 什么 API 调用失败了。 (连接打开关闭)
  • API 调用中指定的选项
  • 进行 API 调用的 ID
  • 进行 API 调用的对象

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

如果您想要有关 WMQ 安全性的友好教程,可以存档几个 session 演示文稿 here .

关于java - com.ibm.mq.MQException : MQJE001: Completion Code '2' , 原因 '2035',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9006610/

相关文章:

java - 运行整个 junit 集成测试类时无法在 java 应用程序中命中断点

java - Android Intent 总是崩溃

java - 如果接口(interface)只声明了方法签名,为什么我们还需要接口(interface)呢?

windows - 在 Intellij 终端中设置 git

c - C 中的 Windows 用户主文件夹 (MinGW)

windows - 如何在 Windows 中以编程方式切换用户

java - Eclipse - 基本数组

ibm-mq - MQ 中的主日志文件和辅助日志文件

c# - IBM MQSeries 从 .NET 访问问题

java - 对 Java 客户端和 WebSphere MQ 使用 SSL 支持