IBM MQ

    技术2025-11-14  6

    一、安装步骤:

    1. root帐号登录系统

    2. unlink /bin/sh; ln -s /bin/bash /bin/sh (ubuntu中需要)

    3. MQ安装程序需将代码安装到目录/opt/mqm下,将数据保存到目录/var/mqm下,需确保相关目录下有足够的磁盘空间4. 创建名称为“mqm”的组和用户,并且将用户的目录指定为/home/mqm//建立用户组mqm,注意:组名必须是mqmgroupadd 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.10suse10.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++测试源码(VCUbuntu 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;

    }

    最新回复(0)