一尘不染

如何将Java JMS与MQseries结合使用

java

我正在尝试开发一个JMS 独立应用程序 来读写MQSeries上的Queue。我的老板要求我使用 纯Java JMS (而不是ibm.mq
lib)来执行此操作。

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

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

您知道该怎么做?还是您有任何链接教我做到这一点。


阅读 224

收藏
2020-12-03

共1个答案

一尘不染

这里的问题是“我的老板要求我使用纯Java JMS(不是ibm.mq
lib)来做到这一点”的要求。JMS是一个规范,每个实现都必须遵守API和语义,但是可以自由地在底层进行任何所需的操作。始终有必要使用运输供应商提供的实现类。因此,如果将WebSphere
MQ用作传输工具,则需要使用IBM MQ JMS类来编写JMS应用程序。

也就是说,如果您坚持使用纯JMS API调用,则可以插入任何传输供应商的类。这是给您原始要求中提到的要求时通常所希望的。

有一篇文章确切描述了您要做什么,这就是 在WebSphere MQ
V6.0上运行独立的Java应用程序。

它仅使用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功能,但是即使对于V6功能,V7客户端中的JMS实现也有了很大的改进。如果出于某些原因您确实必须使用V6客户端,则可以将其下载为SupportPacMQC6。无论使用哪种客户端版本,请确保使用相应的信息中心。

V6信息中心
V7信息中心

最后,此处是带有所有SupportPacs索引的登录页面。

2020-12-03