【问题标题】:Intended use of Transmission Queue传输队列的预期用途
【发布时间】:2014-04-25 20:30:44
【问题描述】:

这是关于 IBM WebSphere MQ V7 的非常基本的问题。

关于传输队列,我的理解是它仅用于驻留在同一队列管理器中的远程队列。因此,如果我想将消息放入队列,我需要将其放入远程队列。

是这样的。
App --> 远程队列 --> 传输队列

我的问题是:
是否可以像这样将消息直接放入传输队列中?
App --> 传输队列

--2014.03.17修改--

我找到了一种将消息直接放入传输队列的方法。我不知道这是一个常见的用途,但为了做到这一点,我需要在消息前面加上MQXQH。我尝试并确认它有效。请参阅信息中心参考here

【问题讨论】:

    标签: ibm-mq


    【解决方案1】:

    永远不要直接放入传输队列。不知道自己在做什么是很危险的。

    您应该将消息放入远程队列。远程队列与本地队列不同。远程队列只是指向另一个队列管理器上的队列的指针。

    【讨论】:

    • 我想确保正确使用队列——就像你说的,消息应该像“客户端”-->“远程队列(指针)”->“传输队列”一样处理" --> "其他 MQ 的本地队列。"所以,非常感谢您的确认。 BTW,实际上可以将消息直接放入传输队列吗?我其实没法直接说出来,只是好奇而已。
    • 呃,你知道的。实际上,我找到了一种将消息直接放入传输队列的方法。我不知道这是一个常见的用途,但为了做到这一点,我需要在消息中添加 MQXQH。我尝试并确认它有效。仅供参考:pic.dhe.ibm.com/infocenter/mqams/v7r0m1/…
    【解决方案2】:

    虽然可以将消息直接放在 XMitQ 上,但允许这种情况发生存在相当大的风险,因此大多数管理员会阻止应用程序直接访问该队列。正如您所发现的,可以使用传输队列标头构造一条消息,然后使用MQMD 和有效负载构造一条普通消息。 (事实上​​,这正是 MCA 的运作方式。)

    这里的问题是 QMgr 不检查驻留在有效负载中的MQMD 中的值,因此您可以将mqm 作为MQMD.UserID,然后将消息寻址到远程命令队列并授予自己管理员权限访问该远程 QMgr。

    具有安全意识的管理员通常使用两种安全控制措施来防止这种情况。首先,它们不允许直接访问 XMitQ。这有助于出站消息。更重要的是,他们将RCVR/RQSTR/CLUSRCVR 频道的MCAUSER 设置为无权将消息放入任何敏感队列的非管理员用户ID。

    当然,另一个问题是,您所描述的完全破坏了 WMQ 的名称解析。通过将路由嵌入应用程序,您可以防止管理员在网络级别调整通道权重、集群设置、故障转移和负载分配。需要重新分配流量?重新部署代码。不是一个好计划。

    因此,出于安全原因以及您为获得 WMQ 的可靠性付出了很多钱——其中大部分来自动态寻址和名称解析功能——强烈建议不要将应用程序编码直接写入 XMitQ。

    【讨论】:

      【解决方案3】:

      您不应该直接使用传输队列。在将消息发送到远程队列管理器时,消息通道代理 (MCA) 将其用作临时存储。

      这是分布式队列 - 即您将消息发布到队列管理器 A,并希望将其路由到队列管理器 B 上的本地队列。因此,您在 QM-A 上定义引用 QM-B 上的本地队列的引用。此参考是“远程队列定义”。

      远程队列定义指定传输队列名称。传输队列绑定到 MCA,后者又知道远程 QM。

      【讨论】:

        猜你喜欢
        • 2023-04-04
        • 2014-02-27
        • 2012-09-23
        • 1970-01-01
        • 1970-01-01
        • 2023-01-31
        • 1970-01-01
        • 1970-01-01
        • 2021-03-05
        相关资源
        最近更新 更多