为 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 支持多种队列寻址模型。
这三个都是一个意思:
- context.createQueue("MY.QUEUE");
- context.createQueue("队列://MY.QUEUE");
- context.createQueue("队列:///MY.QUEUE");
但是,使用三斜杠,您还可以完全限定 REMOTE 队列
- 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
在将消息发送到队列之后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 支持多种队列寻址模型。
这三个都是一个意思:
- context.createQueue("MY.QUEUE");
- context.createQueue("队列://MY.QUEUE");
- context.createQueue("队列:///MY.QUEUE");
但是,使用三斜杠,您还可以完全限定 REMOTE 队列
- 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