我正在尝试从看似简单的Java代码创建主题发布者时遇到问题。我的WMQ在公司单独管理,所以我没有直接控制它。
我尝试使用相当标准的Java代码创建TopicConnection
,然后是TopicSession
然后TopicPublisher
来连接到主题,尽管通过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
上授予身份验证来为我服务。但是,公司风险政策不允许这样做。
我被问到为什么我需要访问基本主题,但当然我不需要访问权限。我只是需要发表我的主题。
任何WMQ专家都有其他想法吗? 非常感谢。
答案 0 :(得分:5)
MQ维护一个用于管理发布/订阅的主题树。默认情况下,不允许非主管用户访问主题树。主题树的根解析来自SYSTEM.BASE.TOPIC的属性。
当应用程序尝试使用主题创建发布者时,MQ使用指定的主题字符串进行权限检查。 MQ在主题树中搜索与给定主题字符串匹配的节点。如果找到匹配,则确定发布或订阅的权限。如果用户具有足够的权限,则创建发布者调用将成功。如果没有节点匹配,则MQ上升到主题树的根目录以确定权限。
在您的情况下,您的应用程序指定了一个与主题树中定义的任何节点都不匹配的主题字符串。 MQ尝试确定根目录的权限。由于您没有发布权限,因此调用失败并显示2035个原因码。
那么可以做些什么呢?不要提供对SYSTEM.BASE.TOPIC的访问权限,而是要求管理员创建一个主题,其中包含您的应用程序正在使用的主题字符串,并为您提供publish
权限。