gpt4 book ai didi

perl - 我可以打开一个集群 MQ 队列来用 Perl 编写吗?

转载 作者:行者123 更新时间:2023-12-04 18:28:41 24 4
gpt4 key购买 nike

如果我在集群中的另一个队列管理器上定义了一个 Websphere MQ 队列,有没有一种方法可以打开它以使用 Perl 界面进行写入?下面的代码带回 mqrc 2085。

$messageQ = MQSeries::Queue->new
(
QueueManager => $qMgr,
Queue => $queue,
Options => $openOpt
) or die ">>>ERROR2: Unable to open the queue: $queue\n";
}

最佳答案

是的! Perl 模块是 WMQ API 的一层薄薄的外表,并公开了所有基本选项和大多数真正深奥的东西。

当您打开队列时,WebSphere MQ 对您为队列和 QMgr 名称提供的值执行名称解析。如果您同时提供 Queue 和 QMgr 名称,则对象引用是完全限定的,WMQ 将尝试按命名打开它。因此,如果您提供的名称是本地 QMgr,并且集群队列没有本地定义的实例,则打开将失败并返回 2085 Unknown Object Name。

打开集群队列的技巧是为 QMgr 名称提供空值。这会导致名称解析检查本地 QMgr 是否有同名队列,然后检查集群存储库并将打开解析为集群队列。请注意,队列必须通告到集群才能正常工作。具体来说,目标队列的 CLUSTER 或 CLUSNL 属性必须是非空的,并且指的是源 QMgr 参与的集群。同样,目标 QMgr 也必须参与与源 QMgr 相同的集群。

另请注意,如果您在打开时指定的 QMgr 名称​​不是本地 QMgr,则 WMQ 将仅尝试解析 QMgr 名称。如果它可以解析到该 QMgr 的路由,那么它会将消息发送到那里。这意味着在集群中,只要您知道完全限定名称,您就可以将消息发送到任何 QMgr 上的任何队列。

最后,您可以在集群队列上定义本地别名。例如,如果您在 QMGRA 和 DEF QA(TARGET.QUEUE) TARGQ(TARGET.QUEUE) 上,然后在同一个集群中的 QMGRB 和 QMGRC 上,您 DEF QL(TARGET.QUEUE) CLUSTER(MYCLUS) 那么就可以打开 QMGR =QMGRA QUEUE=TARGET.QUEUE 并且仍然按预期工作。请注意,别名不会通告到集群,但目标队列会通告。这种方法的唯一问题是,如果集群查询时间过长,第一次打开时 API 调用可能会失败。当我在生产中执行此操作时,我总是提前在别名上使用 amqsput,以使 QMgr 在实际应用程序打开队列之前查询存储库。你为什么要这样做?如果安全是一个问题,您可能不想将所有应用程序直接授权给集群 XMitQ,因为如上所述,它们可以将消息放入集群中任何 QMgr 上的任何队列,包括SYSTEM.ADMIN.COMMAND.QUEUE。别名为您提供了一个挂起授权并将用户限制到集群中特定目的地的地方。

如此简短的回答,请确保您在 Open 调用中提供了一个空的 QMgr 名称,或者在集群队列上设置了一个本地别名。有关此安全方面的更多信息,请参阅 http://t-rob.net/links 上的 WMQ 安全演示文稿。

关于perl - 我可以打开一个集群 MQ 队列来用 Perl 编写吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2924629/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com