`

JMS1.1连接MQ5.3问题

阅读更多

公司需要。通过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包的)

 

 

0
7
分享到:
评论
1 楼 nannan408 2013-04-15  
楼主,国外的那个论坛,能否提供下地址?谢谢 。

相关推荐

Global site tag (gtag.js) - Google Analytics