ibm-mq - IBM MQ - 我无法使用通配符语法订阅主题
问题描述
我在 IBM MQ docker 版本上创建了以下主题:
开发/测试/sys1 开发/测试/sys2
我正在尝试使用以下代码从 XMS .NET API 创建订阅者:
目的地 = sessionWMQ.CreateTopic("dev/test/#");
出现以下异常,它与基于权限的“原因:2035”有关,但我无法弄清楚我必须授予什么权限以及从哪里授予
XMSException 捕获:IBM.XMS.IllegalStateException:无法使用 MQSUB 订阅主题 dev/#。由于另一个消息使用者正在使用它,因此创建订阅可能存在问题。在尝试以相同名称创建新订阅之前,请确保关闭使用此订阅的所有消息使用者。请参阅链接的异常以获取更多信息。
解决方案
如果您收到错误 2035 (MQRC_NOT_AUTHORIZED),队列管理器错误日志中将有相应的消息AMQERR01.LOG
。它会说这样的话:-
AMQ8009: Entity 'mqgusr1' has insufficient authority to access topic string
'dev/test/#'.
EXPLANATION:
The specified entity is not authorized to access the required topic. The
following requested permissions are unauthorized: sub
ACTION:
Ensure that the correct level of authority has been set for this entity against
appropriate topic objects, or ensure that the entity is a member of a privileged
group.
具体来说,此错误消息将告诉您用户 ID、对象名称和缺少的授权。使用这些信息,您几乎可以构建您需要的命令。您确实需要更多信息,那就是您希望授予权限的用户所在的组名。始终建议您在授予权限时使用组名而不是用户名,否则您最终可能会获得太多权限来管理,或者更糟的是,由于主要组用户就像“员工”。
这是命令,假设我的错误消息中的“mqgusr1”位于组“mqgapp”中,并且该组适合被授予订阅主题的权限。
SET AUTHREC PROFILE(SYSTEM.BASE.TOPIC) OBJTYPE(TOPIC) GROUP('mqgapp') AUTHADD(SUB)
在这一点上值得一提的是,将主题相关权限添加到 SYSTEM.BASE.TOPIC 会导致相关组能够使用任何可用主题 - 该对象代表主题树的根。如果您希望仅限制对主题树的某些部分的访问(推荐),那么您应该为要使用的主题树的部分创建一个主题对象,然后在那里授予权限,因此以下命令:
SET AUTHREC PROFILE(SYSTEM.BASE.TOPIC) OBJTYPE(TOPIC) GROUP('mqgapp') AUTHRMV(SUB)
DEFINE TOPIC(DEV.TEST) TOPICSTR('dev/test')
SET AUTHREC PROFILE(DEV.TEST) OBJTYPE(TOPIC) GROUP('mqgapp') AUTHADD(SUB)
推荐阅读
- machine-learning - Pytorch,切片张量导致 RuntimeError:: 梯度计算所需的变量之一已被就地操作修改:
- c - C程序示例2
- javascript - TypeError:无法读取未定义 MongoDB.Clusters 的属性“查找”
- snowflake-cloud-data-platform - ON_ERROR 参数不适用于 JSON 文件
- django - Django Signals - 如何保存实例
- xamarin - 为企业部署 UWP 包,无需提交到商店
- google-maps - 在颤动中更新谷歌地图警报对话框中的标记
- r - 有没有办法“扩大”R中向量的真实值?
- react-native - React Native 样式 textDecorationLine:“下划线”在 iOS 13 中不起作用
- php - Gaufrette(使用 AWS)和 Symfony 4 - 阅读图片