一、安装步骤:
1. 用root帐号登录系统
2. unlink /bin/sh; ln -s /bin/bash /bin/sh (仅ubuntu中需要)
3. MQ安装程序需将代码安装到目录/opt/mqm下,将数据保存到目录/var/mqm下,需确保相关目录下有足够的磁盘空间
4. 创建名称为“mqm”的组和用户,并且将用户的目录指定为/home/mqm
//建立用户组mqm,注意:组名必须是mqm
groupadd mqm
//将root用户增加到mqm组中
usermod -G mqm root
//建立属于组mqm的用户mqm,注意:用户名必须是mqm
useradd mqm -g mqm -d/home/mqm -s/bin/bash
//修改用户mqm的密码
passwd mqm
//创建用户目录
mkdir /home/mqm
//更改目录权限
chown -R mqm:mqm /home/mqm
4. 解压WMQv600Trial-x86_linux_2.tar.gz
//解压文件
tar xvzf WMQv600Trial-x86_linux_2.tar.gz
5. 安装
在安装文件解压目录下
//接受MQ license
./mqlicense.sh –accept
//安装(如果是ubuntu 则需要带--nodeps参数)
rpm --nodeps -ivh MQSeriesIES30-6.0.0-0.i386.rpm MQSeriesSDK-6.0.0-0.i386.rpm MQSeriesMan-6.0.0-0.i386.rpm MQSeriesSamples-6.0.0-0.i386.rpm MQSeriesServer-6.0.0-0.i386.rpm MQSeriesJava-6.0.0-0.i386.rpm MQSeriesClient-6.0.0-0.i386.rpm MQSeriesConfig-6.0.0-0.i386.rpm MQSeriesRuntime-6.0.0-0.i386.rpm MQSeriesMsg_Zh_CN-6.0.0-0.i386.rpm MQSeriesFTA-6.0.0-0.i386.rpm
如果是ubuntu 8.10或suse10.0需安装补丁MQRP0002.tar.gz (名称我简写过,IBM网站有可下载,我这里也有,372,458,780 字节)
rpm --nodeps -ivh IBMJava2-142-ia32-SDK-1.4.2-5.0.i386.rpm MQSeriesClient-U806639-6.0.2-0.i386.rpm MQSeriesConfig-U806639-6.0.2-0.i386.rpm MQSeriesFTA-U806639-6.0.2-0.i386.rpm MQSeriesIES30-U806639-6.0.2-0.i386.rpm MQSeriesJava-U806639-6.0.2-0.i386.rpm MQSeriesMan-U806639-6.0.2-0.i386.rpm MQSeriesMsg_Zh_CN-U806639-6.0.2-0.i386.rpm MQSeriesRuntime-U806639-6.0.2-0.i386.rpm MQSeriesSamples-U806639-6.0.2-0.i386.rpm MQSeriesSDK-U806639-6.0.2-0.i386.rpm MQSeriesServer-U806639-6.0.2-0.i386.rpm MQSeriesTXClient-U806639-6.0.2-0.i386.rpm
二、安装完毕以后,验证安装是否成功,按顺序执行以下步骤:
1. 用mqm帐号登录系统
2. 在/etc/services中添加如下内容
QM00 1414/tcp
3. /etc/inetd.conf中添加如下内容
QM00 stream tcp nowait mqm /opt/mqm/bin/amqcrsta amqcrsta -m QM00
4. 创建缺省队列管理器
crtmqm -lc -lf 16384 -lp 2 -ls 1 QM00
5. 创建本地队列
strmqm QM00 //启动队列管理器
strmqcsv QM00 //启动服务器端
runmqsc QM00 //进入客户端
//创建2个本地队列
def ql(01_1) maxdepth(10000) maxmsgl(1048576) defpsist(yes) replace
def ql(00_1) maxdepth(10000) maxmsgl(1048576) defpsist(yes) replace
6. 创建远程队列
A端
//创建队列管理器,并运行队列管理器
crtmqm -lc -lf 16384 -lp 2 -ls 1 QM00
strmqm QM00
strmqcsv QM00
runmqsc QM00
//创建队列和通道
def ql(00_1) maxdepth(10000) maxmsgl(1048576) defpsist(yes) replace
def qr(01_1) rname(01_1) rqmname(QM01) xmitq(QM01) defpsist(yes) replace
def ql(deadq) defpsist(yes) maxdepth(20000) maxmsgl(1004856) replace
alter qmgr deadq(deadq)
def ql(QM01) usage(xmitq) defpsist(yes) maxdepth(10000) maxmsgl(1048576) trigger trigtype(first) trigdata(00.01) initq(system.channel.initq) replace
def chl(00.01) chltype(sdr) discint(1800) conname('168.33.113.142(1414)') xmitq(QM01) trptype(tcp) shortrty(10000) shorttmr(30) longtmr(300) longrty(999999999) batchsz(50) replace
def chl(01.00) chltype(rcvr) trptype(tcp) replace
B端
//创建队列管理器,并运行队列管理器
crtmqm -lc -lf 16384 -lp 2 -ls 1 QM01
strmqm QM01
strmqcsv QM01
runmqsc QM01
//创建队列和通道
def ql(01_1) maxdepth(10000) maxmsgl(1048576) defpsist(yes) replace
def qr(00_1) rname(00_1) rqmname(QM00) xmitq(QM00) defpsist(yes) replace
def ql(deadq) defpsist(yes) maxdepth(20000) maxmsgl(1004856) replace
alter qmgr deadq(deadq)
def ql(QM00) usage(xmitq) defpsist(yes) maxdepth(10000) maxmsgl(1048576) trigger trigtype(first) trigdata(01.00) initq(system.channel.initq) replace
def chl(01.00) chltype(sdr) discint(1800) conname('168.33.112.124(1414)') xmitq(QM00) trptype(tcp) shortrty(10000) shorttmr(30) longtmr(300) longrty(999999999) batchsz(50) replace
def chl(00.01) chltype(rcvr) trptype(tcp) replace
三、启动队列管理器和通道
strmqm QM01
strmqcsv QM01
runmqsc QM01
start chl(01.00) //启动通道
stop chl(01.00) //停止通道
dis chs(*) //查看通道 STATUS = RUNNING 表示连通正常
四、C++测试源码(VC和Ubuntu g++)
1.如果不发送文件时lpFile参数填空值
2.Linux时保证/home/shtc/bin/QQBattleZone.EXE文件存在,路径可改
3.Windows时也注意更改上述路径
int main()
{
MQAgent myAgent;
string sFile;
string sMsg;
int iRet;
//打开
iRet = myAgent.Init("QM01", "/home/shtc/bin");
printf("初始化返回值:%d[%s]/n", iRet, myAgent.GetErrorInfo());
//发送
sMsg = "我是一个好人";
iRet = myAgent.PutMsg("00_1", sMsg.c_str(), 0, "/home/shtc/bin/QQBattleZone.EXE");
printf("PutMsg返回值:%d[%s]/n", iRet, myAgent.GetErrorInfo());
//收接
sMsg = "";
iRet = myAgent.GetMsg("01_1", sMsg, sFile);
printf("GetMsg返回值:%d[%s]sMsg = [%s]/n", iRet, myAgent.GetErrorInfo(), sMsg.c_str());
//收接完成后要提交
iRet = myAgent.Commit();
printf("Commit返回值:%d[%s]/n", iRet, myAgent.GetErrorInfo());
return 0;
}