当前位置: 首页 > 面试题库 >

如何将Java JMS与MQseries结合使用

霍永年
2023-03-14
问题内容

我正在尝试开发一个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

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


问题答案:

这里的问题是“我的老板要求我使用纯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索引的登录页面。



 类似资料:
  • 问题内容: 我正在尝试使用node.js制作Samsung Smart TV应用程序。 在我的项目中,我想使我的应用程序与服务器PC通信。 根据许多网站,我可以使用“ jsonp”来做到这一点。 这是我发现的客户端代码。 而且,这是我发现的服务器端代码。 这些代码在我的PC(服务器PC)上正常工作,但是当我在其他计算机上打开客户端页面时,它不起作用。 控制台只给我这个日志: 我想使用jsonp处理

  • 我想用Netty ChannelHandler用Gzip压缩和解压,我试了一段时间,但总是有点困难。我的代码如下: 有什么问题吗?

  • 问题内容: 如何创建使芹菜任务看起来像的包装器?还是有更好的方法与Celery集成? Celery的创建者@asksol这样说: 将Celery用作异步I / O框架之上的分布式层是很常见的(提示:将CPU绑定的任务路由到prefork worker意味着它们不会阻塞事件循环)。 但是我找不到任何专门针对框架的代码示例。 问题答案: 如官方网站上所述,这可以通过Celery 5.0版实现: htt

  • 问题内容: 我有一个带有MySQL的远程数据库,并且将我的应用程序用户的照片存储在数据库中,作为LONGTEXT类型的数据库的一行。 我使用Base64将照片转换为字符串。 我使用JSON和PHP连接到远程数据库,因此,我必须使用Base64,因为据我所知,JSON和PHP需要在参数上发送字符串,而使用Base64可以将照片转换为字符串。 可以,但是非常慢。当我加载100 KB的照片时,会花费很多

  • 问题内容: 我目前正在使用Electron和MongoDB构建一个桌面应用程序。此应用程序的目的是在应用程序的本地范围内(而不是在服务器上)收集和存储各种客户的信息。我已经使用node.js对MongoDB进行了一些研究;但是我还没有找到在Electron中使用它的方法。 问题答案: 这是用于MongoDB管理的电子应用程序,您可以检查代码作为如何使用mongodb和electronic的示例。

  • 问题内容: 它们都使用相同的语法来插入变量。例如,如果我想要以下内容 在我的下划线中,我的主要EJS中断,因为它试图替换用户名,并且主页中不存在此类变量。 问题答案: 我认为方括号默认情况下可以在EJS中使用: 而且,如果您需要更高级的知识,EJS github页面将介绍如何创建自定义标签: 我认为第二个“更高级”部分可能特定于服务器端应用程序 https://github.com/visionm