java - 为 IBM MQ 设置 QueueManager 属性的目的是什么?
问题描述
按照这个发送消息到队列的例子,让我们看看设置连接工厂属性的部分
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 示例中看到了类似的情况。
这段代码是怎么回事?是盲目复制粘贴还是有目的?
解决方案
如果您未设置队列管理器或指定以 a 为前缀的值,那么*
您可以连接到侦听您指定的主机和端口的任何队列管理器名称。
如果您指定的队列管理器名称不以 a 为前缀,*
那么它必须与在主机和端口上侦听的队列管理器的名称相匹配。
您还可以使用 CCDT 保存连接详细信息,在这种情况下(除了上述几点)您指定的队列管理器名称用于在 CCDT 中查找连接详细信息。如果它以 a 为前缀,它将在 CCDT 中*
查找不带 the 的名称。*
除了使用queue:///
前缀指定队列名称之外,您还可以使用前缀指定主题topic:///
,我的猜测是createQueue
默认假设您正在指定队列名称。
推荐阅读
- c# - 将 SQL 表中的值与文本框中的条目进行比较
- scala - 如何将 DataFrame 中的行分组为由分隔符 Scala Spark 分隔的单行?
- javascript - 使用javascript聚焦时更改contenteditable div元素的边框
- python - 如何编写查询以从 url 获取 xml 文件并在现有数据库中创建 sql 表
- php - 在 Woocommerce 块中编辑标签
- node.js - POST http://localhost:3000/auth 500(内部服务器错误)和数据未定义
- plantuml - 查看 C4Builder 项目时从 PlantUml 解析错误
- ios - 如何为我的 iOS 应用程序制作四位数的版本号
- c++ - 为什么 range::unique_copy 不能与 std::ostream_iterator 一起使用?
- java - 在图中查找最大覆盖的节点对