4

我在尝试从看似简单的 java 代码创建主题发布者时遇到问题。我的 WMQ 在公司中单独管理,因此我无法直接控制它。

我尝试通过使用相当标准的 Java 代码创建 a TopicConnection,然后是a ,TopicSession然后是 a 来连接到该主题,尽管是通过 SSL 设置一些额外的系统道具。TopicPublisher但是,无论是否使用 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. 但是,公司风险政策不允许这样做。

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

请任何 WMQ 专家有任何其他想法?非常感谢。

4

1 回答 1

5

MQ 维护一个主题树来管理发布/订阅。默认情况下,不允许非管理员用户访问主题树。主题树的根从 SYSTEM.BASE.TOPIC 解析属性。

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

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

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

于 2015-04-30T11:23:17.063 回答