使用 JMS 的 WebSphere MQ
Posted
技术标签:
【中文标题】使用 JMS 的 WebSphere MQ【英文标题】:WebSphere MQ using JMS 【发布时间】:2010-10-28 17:07:05 【问题描述】:我有一个使用 WebSphere MQ Java API 和配置 (xml) 文件来访问 MQ 的应用程序。我想迁移到 WebSphere JMS API。为此,我尝试创建 1)WebSphere MQ 队列连接工厂和 2)来自我本地 WAS 的 WebSphere MQ 队列目标。当我配置我的队列目标并尝试设置我的 MQ 配置参数时,我收到一条错误消息,例如“WMSG0316E:您尝试查看不是本地队列的队列。仅支持本地队列的管理。”
在我尝试连接到远程队列的意义上,该消息是正确的。现在,我不能将我的 WAS 配置为尝试连接到远程队列的 MQ 客户端吗? MQ 客户端在服务器类路径中有必要的 MQ JMS jar。
如果有人能对此有所了解,将不胜感激。
【问题讨论】:
【参考方案1】:我正在研究同样的问题 - 我发现作者确认必须告知 WebSphere 需要“客户端到远程队列”模式的文章,但我尚未找到有关如何执行此操作的详细信息,除了一位作者提到了环境变量。
仍在搜索中...如果找到解决方案,我会发布解决方案。
【讨论】:
解决方案是将 JMS 队列连接工厂配置中的“传输类型”设置设置为“客户端”而不是“绑定”。这位于 WAS 管理控制台中,在“Resources”->“JMS Providers”->“WebSphere MQ”->“Additional Properties”下,其中有一个“WebSphere MQ queue connection factory”项,它会将您带到一个您的队列连接工厂列表。您正在使用的队列(在您的侦听器端口设置中指定)是要更改的设置所在的位置。希望这会有所帮助,马特 你也可以看到它像 MQQueueConnectionFactory cf = new MQQueueConnectionFactory(); cf.setTransportType(JMSC.MQJMS_TP_CLIENT_MQ_TCPIP); // 客户端模式【参考方案2】:你能澄清一下吗?您说您从本地 WAS“创建”连接工厂和队列目标。你的意思是你自己在构建对象吗?
如果是这样,这是错误的方法,您应该将资源配置为应用程序配置的一部分,然后通过 JNDI 查找它们。配置是将本地 JMS 资源绑定到实际实现的位置,在您的情况下是远程 MQ 服务器。您的代码应该只绑定到 JMS,而不是具体的实现。
【讨论】:
我正在“配置”WebSphere JMS 资源,即 WAS 中的 MQ Queue ConnectionFactory 和 MQ Queue Destination。代码只绑定到 JMS 而不是实现——这正是进行此更改的目的。我不是自己构建对象。抱歉措辞 - “创建” - 如果这引起了一些混乱。 @Subramanian - 问题更多在于您在引用 JMS 资源时使用 MQ。 (即 MQ Queue ConnectionFactory 而不是 Queue ConnectionFactory)。我认为您可能指的是 MQ 特定的工件而不是 JMS。【参考方案3】:我将您的错误消息剪切并粘贴到了 Google。 here 以其独特的风格是有关您问题的 IBM 文档。有帮助,不是吗?
您尝试联系的队列是在哪里设置的?它是在与您部署的 WebSphere 实例相同的服务器上运行,还是远程服务器?如果是后者,我想知道您是否需要桥接器或代理,以便您可以在本地发送消息,但通过代理将其显示在远程服务器上。
更新:我不知道,但也许解决这个问题的一种方法是设置一个本地队列,类似于你所说的工作,并让它简单地将所有消息转发到远程队列。
【讨论】:
MQ 正在远程服务器中运行。这就是我卡住的地方-“..似乎要在本地发送消息..”我确实尝试在同一系统上安装 MQ 6 和 WAS,并且 JMS 运行良好。但是,当 MQ 在远程系统中时,我在配置 JMS 资源时指定了其 IP 地址,我得到了这个异常。以上是关于使用 JMS 的 WebSphere MQ的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Websphere 服务器连接到 Weblogic JMS?
JMS 的 Spring 配置(Websphere MQ - SSL、Tomcat、JNDI、非 IBM JRE)
使用 CoD over Camel JMS 组件实现本机 websphere MQ
基于 Websphere 的 SOAP over JMS 示例
尝试远程连接到 Websphere 上的 JMS 队列时出现 sun/io/MalformedInputException