为 IBM MQ 设置 QueueManager 属性 的目的是什么?

What is the purpose of setting QueueManager property for IBM MQ?

在将消息发送到队列之后example让我们看一下设置连接工厂属性的部分

        cf.setStringProperty(WMQConstants.WMQ_HOST_NAME, HOST);
        cf.setIntProperty(WMQConstants.WMQ_PORT, PORT);
        cf.setStringProperty(WMQConstants.WMQ_CHANNEL, CHANNEL);
        cf.setIntProperty(WMQConstants.WMQ_CONNECTION_MODE, WMQConstants.WMQ_CM_CLIENT);
        cf.setStringProperty(WMQConstants.WMQ_QUEUE_MANAGER, QMGR);
        cf.setStringProperty(WMQConstants.WMQ_APPLICATIONNAME, "JmsPutGet (JMS)");
        cf.setBooleanProperty(WMQConstants.USER_AUTHENTICATION_MQCSP, true);
        cf.setStringProperty(WMQConstants.USERID, APP_USER);
        cf.setStringProperty(WMQConstants.PASSWORD, APP_PASSWORD); 

删除行 cf.setStringProperty(WMQConstants.WMQ_QUEUE_MANAGER, QMGR); 后没有任何变化:客户端仍然可以成功发送和接收消息。

这里设置WMQConstants.WMQ_QUEUE_MANAGER属性的目的是什么?

IBM MQ 服务器是基于此 Dockefile 的容器:

FROM ibmcom/mq:9.2.2.0-r1

ENV LICENSE=accept
ENV MQ_DEV=true
ENV MQ_APP_PASSWORD=app-password
ENV MQ_ADMIN_PASSWORD=admin-pwd
ENV MQ_QMGR_NAME=KUPOL_DEV_QM

另外:
在同一个示例中,我们看到行
destination = context.createQueue("queue:///" + QUEUE_NAME)
如果删除前缀 "queue:///",它不会破坏应用程序,将行保留为
destination = context.createQueue(QUEUE_NAME).

我在 Web 上的多个 IBM MQ 示例中看到了类似的事情。
这段代码是怎么回事?是盲目复制粘贴还是有意为之?

如果您不设置队列管理器或指定一个以 * 为前缀的值,您可以连接到侦听您指定的主机和端口的任何队列管理器名称。

如果您指定的队列管理器名称没有前缀 *,那么它必须与侦听主机和端口的队列管理器的名称相匹配。

您还可以使用 CCDT 来保存连接详细信息,在这种情况下(除了上述几点之外)您指定的队列管理器名称用于在 CCDT 中查找连接详细信息。如果它以 * 为前缀,它将在 CCDT 中查找没有 * 的名称。

除了用queue:///前缀指定队列名称外,你还可以用topic:///前缀指定主题,我的猜测是createQueue默认假定你正在指定一个队列名字.

您的示例代码似乎是 JMS。 IBM MQ 支持多种队列寻址模型。

这三个都是一个意思:

  1. context.createQueue("MY.QUEUE");
  2. context.createQueue("队列://MY.QUEUE");
  3. context.createQueue("队列:///MY.QUEUE");

但是,使用三斜杠,您还可以完全限定 REMOTE 队列

  1. context.createQueue("队列://QMGRB/MY.OTHER.QUEUE");

这会告诉 IBM MQ 将消息发送到 QMgr,并让它在 'QMGRB' 上将消息传送到远程队列 'MY.OTHER.QUEUE'。

注意:IBM MQ 还支持目标选项,因此您可以修改持久性、优先级、字符编码、targetClient 等。这很有用,因此您可以外部化配置并更改消息模式,而无需更改代码!

参考:https://www.ibm.com/docs/en/ibm-mq/9.0?topic=applications-creating-destinations-in-jms-application