创建 JMS 主题发布者 returns 2035 在 WMQ 中未经授权

Creating JMS topic publisher returns 2035 unauthorized in WMQ

我在尝试从看似简单的 java 代码创建主题发布者时遇到了一个持续的问题。我的WMQ是在公司单独管理的,所以我不能直接控制它。

我尝试通过创建 TopicConnectionTopicSessionTopicPublisher 来连接主题,使用相当标准的 Java 代码,尽管是通过 SSL 所以设置一些额外的系统道具。但是,无论是否使用 SSL,我都遇到了同样的问题,我相当确定。

在线

this.topicPublisher = this.topicPublisherSession.createPublisher(this.topic);

如下引发WMQ异常

Caused by: com.ibm.mq.MQException: JMSCMQ0001: WebSphere MQ call failed with compcode '2' ('MQCC_FAILED') reason '2035' ('MQRC_NOT_AUTHORIZED').
at com.ibm.msg.client.wmq.common.internal.Reason.createException(Reason.java:209)

WMQ 管理员可以通过在 SYSTEM.BASE.TOPIC 上授予授权来为我提供 "fix"。然而,这是公司风险政策所不允许的。

有人问我为什么需要访问基本主题,但我当然不需要该访问权限。我只需要发布到我的主题即可。

WMQ 专家还有其他想法吗? 非常感谢。

MQ 维护一个主题树来管理 publish/subscribe。默认情况下,不允许非管理员用户访问主题树。主题树的根解析来自 SYSTEM.BASE.TOPIC.

的属性

当应用程序尝试创建带有主题的发布者时,MQ 会使用指定的主题字符串进行权限检查。 MQ 在主题树中搜索与给定主题字符串匹配的节点。如果找到匹配项,则确定发布或订阅的权限。如果用户有足够的权限,那么创建发布者调用就会成功。如果没有节点匹配,则 MQ 会向上到主题树的根部来确定权限。

在您的情况下,您的应用程序指定的主题字符串与主题树中定义的任何节点都不匹配。 MQ 试图确定根的权限。由于您没有发布权限,调用失败,原因代码为 2035。

那么可以做什么呢?不要提供对 SYSTEM.BASE.TOPIC 的访问权限,而是要求您的管理员使用您的应用程序正在使用的主题字符串创建一个主题,并为您提供 publish 权限。