传输队列的预期用途

时间:2014-02-28 05:42:01

标签: ibm-mq

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

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

就是这样。
应用 - >远程队列 - >传输队列

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

- 于2014.03.17修改 -

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

3 个答案:

答案 0 :(得分:3)

不要直接放入传输队列。如果你不知道自己在做什么,这很危险。

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

答案 1 :(得分:3)

尽管可以将消息直接放在XMitQ上,但允许发生这种情况的风险很大,因此大多数管理员都会阻止应用程序直接访问该队列。正如您所发现的那样,可以构造一个带有传输队列头的消息,并在其后面创建一个带有MQMD和有效负载的普通消息。 (事实上​​,这就是MCA的工作方式。)

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

注重安全性的管理员通常使用两个安全控件来防止这种情况发生。首先,他们不允许直接访问XMitQ。这有助于出站邮件。更重要的是,他们将MCAUSER / RCVR / RQSTR个频道的CLUSRCVR设置为未授权将消息放入任何敏感队列的非管理员用户ID。

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

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

答案 2 :(得分:1)

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

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

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