java - 如何将 Java JMS 与 MQSeries 一起使用

标签 java jms ibm-mq

我正在尝试开发一个 JMS 独立应用程序来读取和写入 MQSeries 上的队列。 我的老板让我使用 pure java JMS(不是 ibm.mq lib)来做到这一点。

这里是建立jms连接需要的信息:

  mq.hostname=10.10.10.10
  mq.channel=API.CLIENTCHL
  mq.queueManager=MQPETAPI
  mq.port=1422

你知道怎么做吗?或者你有没有教我这样做的链接。

最佳答案

这里的问题是要求“我的老板让我使用纯 java JMS(不是 ibm.mq lib)来做到这一点。” JMS 是一种规范,每个实现都必须符合 API 和语义,但可以在低级别自由地做任何他们想做的事情。始终需要使用传输供应商提供的实现类。因此,如果您使用 WebSphere MQ 作为传输,则需要使用 IBM MQ JMS 类来编写 JMS 应用程序。

也就是说,如果您坚持使用纯 JMS API 调用,您将能够插入任何传输供应商的类。当您收到原始帖子中提到的要求时,通常会这样做。

有一篇文章准确地描述了您想要做什么,名为 Running a standalone Java application on WebSphere MQ V6.0 它仅使用 JMS API,并在本地文件系统(.bindings 文件)中使用 JNDI。通过将 IBM JMS 类换成另一个供应商并使用他们的 JNDI 工具,您将能够插入任何 JMS 传输,而无需使用这种方法更改您的代码。

如果您想在没有 JNDI 的情况下做同样的事情,请查看随 MQ 客户端安装提供的示例程序,您可以在其中获取 Java 类。在 UNIX/Linux 系统中,它们位于 /opt/mqm/samp 中,而在 Windows 中,它们位于 install_dir/tools/jms/samples 中。 SimpleRequestor.java 示例包含以下代码,用于在不使用 JNDI 的情况下初始化连接工厂:

try {
  // Create a connection factory
  JmsFactoryFactory ff = JmsFactoryFactory.getInstance(WMQConstants.WMQ_PROVIDER);
  JmsConnectionFactory cf = ff.createConnectionFactory();

  // Set the properties
  cf.setStringProperty(WMQConstants.WMQ_HOST_NAME, "localhost");
  cf.setIntProperty(WMQConstants.WMQ_PORT, 1414);
  cf.setStringProperty(WMQConstants.WMQ_CHANNEL, "SYSTEM.DEF.SVRCONN");
  cf.setIntProperty(WMQConstants.WMQ_CONNECTION_MODE, WMQConstants.WMQ_CM_CLIENT);
  cf.setStringProperty(WMQConstants.WMQ_QUEUE_MANAGER, "QM1");

因为这种方法不使用 JNDI,所以您需要编写不能跨传输供应商传输的代码。它是 IBM WebSphere MQ 特定的。

如果您从某个地方获取 MQ jar 并且没有完整安装(因此没有示例),您可以将其下载为 SupportPac MQC7 .下载是免费的。通常,您应该使用最新的客户端,即使使用后级队列管理器。显然,您不会从 V6 QMgr 获得 V7 功能,但 V7 客户端中的 JMS 实现得到了很大改进,即使对于 V6 功能也是如此。如果由于某种原因你真的必须使用 V6 客户端,你可以下载它为 SupportPacMQC6 .无论您使用哪个客户端版本,请务必使用相应的信息中心。

V6 Infocenter
V7 Infocenter

最后,带有所有 SupportPacs 索引的登录页面是 here .

关于java - 如何将 Java JMS 与 MQSeries 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6935639/

相关文章:

java - ejb注入(inject)中的NullPointerException

java - java数组中文件的访问路径

java - JMS 可靠性,处理服务器停机

jms - 使用客户端模式连接到 IBM MQ 时出现 MQJMS2005 异常

c# - 将 USER_ID_PROPERTY 添加到 Hashtable 时,MQQueueManager 构造函数失败

java - 为什么在最终的 Java 类中允许 protected 成员?

java - 尝试将 hashmap getValue() 解析为 int 时出错

java - 运行多个 Spring Boot 测试时,@MockBean 在 JMS 监听器中使用不同的实例

java - Spring配置文件错误

ssl - 没有用于 MQ channel 的 SSL 或 TLS 证书(从终端运行 - Windows 10)