公司需要。通过JMS方式连接IBM WebSphere MQ操作制定队列中的消息。
目标MQ版本为5.3. JMS选择1.1.
基本实现是在tomcat上建立连接到MQ的Resource, 然后程序通过JNDI访问resource,再借用Spring对JMS的封装,使用org.springframework.jms.listener.adapter.MessageListenerAdapter监听队列消息。
在公司的测试环境中预先装了一个MQ7,抓取队列中消息正常。然而当安装了MQ5.3以后,原来的代码无法正常连接到队列中。
我能想到的可能原因如下:
1.MQ5.3不兼容JMS1.1的版本,只能兼容早期的JMS1.0.2规范?
其实国内外论坛上提到的很多都指明JMS1.1规范是在MQ5.3之后才出现的,无法使用JMS1.1正确连接MQ5.3.我开始也对此深信不移,于是将JMS jar包换成1.0.2,更换对应的spring类到xxx102上.但是始终抛出无法创建队列管理器的异常。
2.服务提供商jar包版本问题?
项目中类路径下放置的都是开始开发用的MQ7的jar包。观察后,确定MQ7与MQ5不但jar包内容有更新,而且使用的jar包也有所不同。于是将开发环境的jar包全部更换到5上。可是异常依然存在。
花了一下午的时间,翻了很多资料,无果。最后只好重新改回JMS1.1与MQ7jar包环境(至少这样的搭配在开始的时候还可以正常连接MQ7).重启发现抛出的异常与之前的都不同(Caused by: com.ibm.msg.client.jms.DetailedJMSSecurityException: JMSWMQ2013: The security authentication was not valid that was supplied for QueueManager 'LOROL' with connection mode 'Client' and host name 'xx.xx.xx.xx'. Please check if the supplied username and password are correct on the QueueManager you are connecting to)
这个问题很明显是用户权限验证失败。然而我查了《WebSphere MQ Using Java.pdf》中关于Administering JMS objects的ProPerty(也就是tomcat中对应resource的属性),没有关于用户名和密码的配置。
最终还是在放国外一个论坛的时候发现了一个兄弟的回答,可能需要在对应的通道上设置MAC(之前都是放空的).于是远程到MQ5.3上给了对应通道一个MAC:MUSR_MQADMIN。 消息可以正常接收了。
结论: JMS1.1可以正常连接MQ低版本(MQ5.3).同时证明,MQ7的JAVA依赖包完全可以用来连接低版本的MQ5.3,而不像许多查到的资料中所述不能连接。
(注:最后一次正常的连接我额外放入了com.ibm.mqetclient.jar,有可能这个也起到作用。不过连接MQ7版本是不用这个jar包的)
分享到:
相关推荐
JMS1.1规范(中文) 免费下载 找找找了半天才找到
JMS1.1 API JAVADOC 中文版+英文版,chm文件 真正的API中文版,而不是JMS规范
EJB持久化规范,EJB核心规范,EJB精简化规范 javaEE5规范 JMS1.1规范 JSP2.1规范 中文版
提供免费下载的 jms1.1 ,需要请下载,由于直接的 jar1.1 的名称已经被收费的给占据了,所以只能换个名字.
JMS1.1 规范有中文和英文版本 英文版是从官网下载的,中文版是网上找的。
JMS1.1规范(中文版) 虽然不是什么好好的资源,希望对初心者有一点帮助。
jms-1.1.jar
不可多的jms1.1源码,并且带有中文和英文的chm格式的说明文档,方便E文不好的朋友 资源列表 jms_en.chm jms_zh.chm jms_1.1_src
作者:卫建军 Java 是当前 IT 领域中比较流行的技术之一。J2EE 是当前比较流行的企业级应用架构。 本人一直致力于 J2EE 架构的学习和研究,但是总是对英文文档...持久化规范》和《JMS1.1 规范》。希望对大家有所帮助。
JMS1.1规范培训教程&&spring框架
geronimo-jms_1.1_spec-1.0.jar
jms工具jar包,使用jms需要的jar包(jms工具jar包,使用jms需要的jar包)
JMS1.1规范是一个来源于现有各种消息系统,用于Java应用系统的消息规范。所有期望在消息系统间进行移植的应用都要使用该规范的接口,同样期望用于J2EE架构的消息系统实现也要遵循本规范。
JMS 1.1 中文版和英文版
用jms 向webshpere mq里发送消息
JMS规范v1.1的官方原版,大家学习ActiveMQ的时候可以进行参考。详细介绍了包括连接、session、生产者、消费者、topic、queue等概念。深入学习的必备手册。
赠送jar包:geronimo-jms_1.1_spec-1.1.1.jar; 赠送原API文档:geronimo-jms_1.1_spec-1.1.1-javadoc.jar; 赠送源代码:geronimo-jms_1.1_spec-1.1.1-sources.jar; 包含翻译后的API文档:geronimo-jms_1.1_...
目的:通过JMS 实现 IBM MQ的请求应答功能 工作原理:消息生产者发送消息到队列IN1,然后可以异步或者同步等待消费者接收到IN1消息后,生成应答消息,并发布到IN2队列中。生产者通过messageid在IN2队列中进行消息...