1-背景知识
IBM MQ支持多种语言开发,本文主要是考虑Java应用开发,MQ提供了相关的Java类库,可以很方便集成到Java应用中。
IBM MQ Java相关类库允许Java应用直接与队列管理器交互,或者连接MQ服务器和客户端进行交互。
类库主要有两个,一个是MQ classes for Java,另一个是支持JMS标准的MQ classes for JMS。
由于是示例学习,本文主要尝试利用MQ classes for Java建立MQ简单应用,从MQ 8.0开始,类库是基于Java 7建立,因此需要Java 7以上运行时环境。
当然官方推荐使用JMS,因为最新的功能例如异步消费、自动重连等功能,都只在JMS中支持
开发有两种通信模式连接MQ:
客户端模式(client mode):应用作为客户端使用TCP/IP连接MQ服务器,应用可以部署在相同机器上或者不同机器上;
绑定模式(binding mode):通过JNI(Java Native Interface)直接连接MQ服务器,避免网络通信,性能更佳,必须和MQ服务器在相同机器上;
2-开发环境准备
2.1 开发环境
VMware Workstation 11.1.4
SuSE Linux Server x64 SP4 虚拟机
JDK 8.0
MQ 8.0安装包
2.2 安装
安装好虚拟机,SuSE Linux SP4,接下来安装MQ本地开发环境
**安装MQ相关组件**
# tar -xvf WSMQ_8.0_IFR_TRIAL_LNX_ON_X86_64_.tar.gz
# cd server
安装MQ运行时组件:
# rpm -ivh MQSeriesRuntime-8.0.0-2.x86_64.rpm
安装服务器组件:
# rpm -ivh MQSeriesServer-8.0.0-2.x86_64.rpm
安装MQ Java库:这里面提供MQ Java开发相关的类库
# rpm -ivh MQSeriesJava-8.0.0-2.x86_64.rpm
安装MQ JRE:java运行时用来运行MQ Java应用
# rpm -ivh MQSeriesJRE-8.0.0-2.x86_64.rpm
**安装JDK**
下载JDK压缩包,放入/home目录下
# cd /home
# tar xvfz jdk-8u102-linux-x64.tar.gz
# cd jdk1.8.0_102
# ./java -version
出错:
Error occurred during initialization of VM
Could not allocate metaspace: 1073741824 bytes
很明显内存空间不够导致,原虚拟机只有768MB内存,增加到2GB,然后重启虚拟机
# reboot
# cd /home/jdk1.8.0_102/bin
# ./java -version
# ./javac
提示安装成功
**配置MQ服务器**
# useradd mquser1 -u 3001
# passwd mquser1 设置密码为mqtest2016
# su - mqm
~ cd /opt/mqm/bin
设置mq环境变量
~ source setmqenv -s
创建队列管理器JAVA.QUEUE.MANAGER.1,并启动
~ crtmqm JAVA.QUEUE.MANAGER.1
~ strmqm JAVA.QUEUE.MANAGER.1
~ dspmq 查看所有队列管理器运行状态
启动脚本执行器,进行设置
~ runmqsc JAVA.QUEUE.MANAGER.1
输入:
DEFINE QLOCAL(QUEUE1) 创建本地队列QUEUE1
授权mquser1用户(id为3001)使用队列QUEUE1,其中PROFILE是对该条记录进行命名,PRINCIPAL指定特定用户,表明权限授权某用户。
SET AUTHREC PROFILE(QUEUE1) OBJTYPE(QUEUE) PRINCIPAL('mquser1') AUTHADD(PUT,GET)
授权用户mquser1可以连接队列管理器
SET AUTHREC OBJTYPE(QMGR) PRINCIPAL('mquser1') AUTHADD(CONNECT)
定义服务器连接通道
DEFINE CHANNEL(JAVA.CLIENT.CHANNEL1) CHLTYPE(SVRCONN) TRPTYPE(TCP)
授权MQ客户端可以连接上面定义的通道,通过ip地址和用户名方式授权
SET CHLAUTH(JAVA.CLIENT.CHANNEL1) TYPE(ADDRESSMAP) ADDRESS('127.0.0.1') MCAUSER('mquser1')
定义监听器,接受连接
DEFINE LISTENER(JAVA.CLIENT.LISTENER1) TRPTYPE(TCP) CONTROL(QMGR) PORT(1316)
启动:
START LISTENER(JAVA.CLIENT.LISTENER1)
结束:
end
**编写Java程序**
MQ Java应用主要需要包含两个Jar包:com.ibm.mq.allclient.jar 和 com.ibm.mq.traceControl.jar
在安装目录下/opt/mqm/java/lib
# cd /opt/mqm/java/lib
# java -java com.ibm.mq.allclient.jar 查看该jar详细信息
接下来可以用vim或者IDE编写程序
3-客户端模式进行连接
简单应用,读写本机队列,发送消息和读取消息,以客户端模式,利用TCP/IP进行通信
# cd /home/mq
# vim MQTest.java
输入以下内容: