IBM MQ入门及使用及JMS客户端发送消息到服务器

本文是一个最入门级的文章,描述想正常运行样例需要做的操作和遇到的问题。

 

 IBM的产品设计的都比较复杂,上手不容易。最近刚开始使用IBM MQ,针对遇到的一些问题记录一下。

 

       之前我对MQ也稍微有了一点点了解,知道了队列管理器,队列,通道和MCA的概念。安装MQ的服务端,也都是下一步下一步点击完成,没有做任何配置,很顺利的完成了。完成之后可以打开一个类似开发平台的一个东西:


IBM MQ入门及使用及JMS客户端发送消息到服务器
 

有了这个管理器之后通过管理器简单操作,创建队列管理器,队列和通道成功。

 

注意会有一个问题,就是如何执行命令?

这个我在网上查了好多都没有介绍,以为在上述界面的某个操作中能够提供执行界面。后来才发现,命令是用过“cmd”弹出dos窗口执行的。

在有些环境下安装完MQ服务端后,使用命令行执行命令会出现“'crtmqm' 不是内部或外部命令,也不是可运行的程序”类似的问题。这时候需要手工把命令所在的目录添加到环境变量Path中。例如:;C:\Program Files (x86)\IBM\WebSphere MQ\bin

 

 

在IBM的****IBM\WebSphere MQ\tools\jms\samples目录下有一些样例。想跑一下。我使用的eclipse开发环境。操作步骤如下:

  1. 在eclipse里新建一个普通的java项目,然后把相关的类考进来。
  2. 把****IBM\WebSphere MQ\java\lib下的jar包考进开发环境并添加到classpath中
  3. 直接运行样例

运行了那几个类,发现,所有的java代码都显示一样的结果:

No arguments! Mandatory arguments must be specified.

Usage:
JmsProducer -m queueManagerName -d destinationName [-h host -p port -l channel]

 

跑一个样例失败~

之后仔细研究了一下代码,发现,需要提供一些参数,代码是需要修改的,而不是直接可以执行的程序。

于是我在    parseArgs(args);代码上方对参数做了下修改: args = new String[]{"-m","aaaa", "-d","aa"};。意思是往名称为“aaaa”队列管理器的"aa"队列里发送消息。在这之前,需要在服务器中创建队列管理器aaaa和aa,并运行。这时候和通道MCA等应该还没有什么关系。运行时提示如下错误:

com.ibm.msg.client.jms.DetailedJMSSecurityException: JMSWMQ2013: 为队列管理器 'aaaa' 提供的安全性认证无效,连接方式为 'Client',主机名为 'localhost(1414)'。
请检查提供的用户名和密码在您正在连接的队列管理器中是否正确。
Inner exception(s):
com.ibm.mq.MQException: JMSCMQ0001: WebSphere MQ 调用失败,完成代码为 '2' ( 'MQCC_FAILED' ),原因为 '2035' ( 'MQRC_NOT_AUTHORIZED' )。
FAILURE

遇到这个问题的解决方式有两种,一种是去掉通信认证。另一种方式据网上说是增加用户然后添加到用户组然后再怎么着。目前还没找到这种解决方式。

通信认证方式:

  1. 在MQ服务端选择要通信的队列。注意,这个队列要和java客户端里的使用的队列一致。
  2. 在队列上点击右键选择“属性”。
  3. 在属性列表中选择“通信”。
  4. “通信”的“通道认证记录”选择“已禁用”。如下图所示:
    IBM MQ入门及使用及JMS客户端发送消息到服务器
     

这时候运行样例:eclipse的控制台打印信息如下:

Sent message:

  JMSMessage class: jms_text
  JMSType:          null
  JMSDeliveryMode:  2
  JMSExpiration:    0
  JMSPriority:      4
  JMSMessageID:     ID:414d5120616161612020202020202020c759fe5020030a02
  JMSTimestamp:     1358908084347
  JMSCorrelationID: null
  JMSDestination:   queue:///aa
  JMSReplyTo:       null
  JMSRedelivered:   false
    JMSXAppID: test.JmsProducer           
    JMSXDeliveryCount: 0
    JMSXUserID: Administrato
    JMS_IBM_PutApplType: 28
    JMS_IBM_PutDate: 20130123
    JMS_IBM_PutTime: 02280436
JmsProducer: Your lucky number today is 315
SUCCESS

再看MQ服务器端:

  1. 选择队列管理器“aaaa”。选择“aaaa”下的队列“aa”。
  2. 在MQ资源管理器-内容页中选择队列“aa”.
    IBM MQ入门及使用及JMS客户端发送消息到服务器
  3. 在队列"aa"中右键,选择菜单“浏览消息”。
    IBM MQ入门及使用及JMS客户端发送消息到服务器
     可以看到JmsProducer发送的消息啦,Binggo!