【问题标题】:Getting JMSException connecting to IBM MQ from Java client获取从 Java 客户端连接到 IBM MQ 的 JMSException
【发布时间】:2021-01-02 01:20:04
【问题描述】:

我们正在尝试从 Java 客户端连接到 IBM MQ。我们使用 JMSAdmin 实用程序为 JNDI 上下文生成了.bindings。连接到 IBM MQ 时,我们遇到以下异常:

ERR fmbaJMS JMSException: JMSWMQ0018: Failed to connect to queue manager '<queue manager name>' with connection mode 'Client' and host name 'null' 

.bindings 文件正确具有时发送的主机名参数为空

mq/RefAddr/30/Content=localhost(51410)
mq/RefAddr/30/Type=CRSHOSTS 

指向本地主机和端口 51410 的条目。

【问题讨论】:

  • 我认为我们需要查看更多代码。您引用的文件.bindings 由JVM 的RefFSContextFactory JNDI 提供程序读取,必须以特定方式初始化。

标签: java jms ibm-mq


【解决方案1】:

您的 .bindings 文件看起来不正确。你用来创建它的 JMSAdmin 命令是什么?

MQ0018:无法连接到队列管理器“bt.qm.ccxp0”

这是您的队列管理器名称还是 QCF?注意:根据 IBM 最佳实践,队列管理器名称应为大写。

要定义 QCF(队列连接工厂),您可以:

DEFINE QCF(myQCF) QMANAGER(MQA1) CHANNEL(TEST.CHL) HOSTNAME(127.0.0.1) PORT(1414) TRANSPORT(CLIENT) FAILIFQUIESCE(YES)

要定义 JMS 队列,您可以:

DEFINE Q(mqs.dev.test.q) QUEUE(TEST.Q1) QMANAGER(MQA1) TARGCLIENT(JMS) FAILIFQUIESCE(YES)

然后在您的代码中,您将执行以下操作以从 MQ JNDI 加载对象:

Hashtable<String,String> env = new Hashtable<String,String>();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.fscontext.RefFSContextFactory");
env.put(Context.PROVIDER_URL, "file:/C:/JNDI-Directory");

Context ctx = new InitialContext(env);

QueueConnectionFactory cf = (QueueConnectionFactory) ctx.lookup("myQCF");
Queue q = (Queue) ctx.lookup("mqs.dev.test.q");

【讨论】:

  • 这里发送的主机名是“null” ...(ERR fmbaJMS JMSException:JMSWMQ0018:无法使用连接模式“Client”和主机名“null”连接到队列管理器“bt.qm.ccxp0” ) ... 会不会有问题
  • 正如我上面所说:您用来创建它的 JMSAdmin 命令是什么?
  • java -Djava.library.path=$MQ_JAVA_LIB_PATH -DMQJMS_LOG_DIR=$MQ_JAVA_DATA_PATH/log -DMQJMS_TRACE_DIR=$MQ_JAVA_DATA_PATH/trace -DMQJMS_INSTALL_PATH=$MQ_JAVA_INSTALL_P ATH com.ibm.mq.jms.admin.JMSAdmin
  • $FILE 中有什么内容?
  • 您给了我们运行 JMSAdmin 工具的命令。我想查看 JMSAdmin 工具处理的 JMSAdmin 命令。正如 JoshMc 所说,$FILE 中有什么?
猜你喜欢
  • 2022-11-08
  • 1970-01-01
  • 2020-04-21
  • 1970-01-01
  • 2011-03-04
  • 2011-02-09
  • 2019-03-17
  • 1970-01-01
  • 2013-03-28
相关资源
最近更新 更多