centos7 64位安装IBM MQ
我这里下载的是mq8.0版本,9.0的没有试,下载地址
https://pan.baidu.com/s/11GCnMDBp_T8k7XqMEqdK8g 提取码:hzcm
下载下来解压
tar -zxvf mqadv_dev80_linux_x86-64.tar.gz
cd MQServer 进入目录
./mqlicense.sh 执行授权信息
开始安装mq
rpm -U MQSeriesRuntime-8.0.0-4.x86_64.rpm
rpm -U MQSeriesSDK-8.0.0-4.x86_64.rpm
rpm -U MQSeriesServer-8.0.0-4.x86_64.rpm
rpm -U MQSeriesClient-8.0.0-4.x86_64.rpm
rpm -U MQSeriesSamples-8.0.0-4.x86_64.rpm
安装过程创建了一个名为 mqm 的用户和一个同样名为 mqm 的组。此时,新用户是被锁定的,您必须设置一个密码来解锁,可用 passwd 命令做到这一点
执行passwd mqm 设置用户密码
现在mq需要的东西都安装好了
开始设置环境变量,方便执行命令
vi /etc/profile
添加到到末尾
export PATH=$PATH:/opt/mqm/samp/bin:/opt/mqm/bin:bin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/bin
export PATH=$PATH:/opt/mqm/samp/bin
开始测试一个简单的队列:
切换到mqm 这个用户下执行命令
su mqm
crtmqm Q2 创建队列Q2
strmqm Q2 启动队列
runmqsc Q2 进入队列管理命令
执行命令:
定义一个本地队列
DEFINE QLOCAL ("Queue") DEFPSIST (YES) MAXDEPTH(100) REPLACE
定义一个通道,名称是CHAN_SERVER_CON
DEFINE CHANNEL("CHAN_SERVER_CON") CHLTYPE(SVRCONN) REPLACE
定义一个监听器
DEFINE LISTENER("LISTENER.TCP") TRPTYPE(TCP) CONTROL(QMGR) PORT(1414) REPLACE
开启监听
START LISTENER("LISTENER.TCP")
这样netstate -antp 就可以看到刚才监听的端口了
退出管理器,输入end
测试下队列:
amqsput Queue Q2
输入信息test,双击回车就结束了
获取队列内容:
现在已经可以了
php 扩展安装
解压,进去目录:
执行phpize
./configure --with-php-config=/www/server/php/72/bin/php-config --with-libdir=lib64
--with-php-config 这个是php-config文件的位置
--with-libdir 64位的要加这个不然会报错
make&&make install
执行成功后会有个so的文件,开启PHP的扩展
修改php.ini配置文件。添加
extension=mqseries.so
查看下扩展是否成功
php -m |grep mqseries
有的话就是安装成功了
现在开始测试php代码
$mqcno=array("Version"=>MQSERIES_MQCNO_VERSION_2,"Options"=>MQSERIES_MQCNO_STANDARD_BINDING,"MQCD"=>array("ChannelName"=>"CHAN_SERVER_CON",//刚才创建的通道名称"ConnectionName"=>"127.0.0.1(1414)","TransportType"=>MQSERIES_MQXPT_TCP));
mqseries_connx("Q2",$mqcno,$conn,$comp_code,$reason);if($comp_code!==MQSERIES_MQCC_OK) {printf("Connx CompCode:%d Reason:%d Text:%s
n",$comp_code,$reason, mqseries_strerror($reason));exit;}$objDesc=array("ObjectName"=>"Queue");//队列的名称mqseries_open($conn,$objDesc,MQSERIES_MQOO_INPUT_AS_Q_DEF|MQSERIES_MQOO_FAIL_IF_QUIESCING|MQSERIES_MQOO_OUTPUT,$obj,$comp_code,$reason);// echo mqseries_strerror($reason);// var_dump($reason);// die();$mdg=array();$gmo=array("Options"=>MQSERIES_MQGMO_FAIL_IF_QUIESCING|MQSERIES_MQGMO_WAIT,"WaitInterval"=>3000);mqseries_get($conn,$obj,$mdg,$gmo,255,$msg,$data_length,$comp_code,$reason);if($comp_code!==MQSERIES_MQCC_OK) {printf("GET CompCode:%d Reason:%d Text:%s
",$comp_code,$reason, mqseries_strerror($reason));}var_dump($msg);$md=array("Version"=>MQSERIES_MQMD_VERSION_1,"Expiry"=>MQSERIES_MQEI_UNLIMITED,"Report"=>MQSERIES_MQRO_NONE,"MsgType"=>MQSERIES_MQMT_DATAGRAM,"Format"=>MQSERIES_MQFMT_STRING,"Priority"=>1,"Persistence"=>MQSERIES_MQPER_PERSISTENT);$pmo=array("Options"=>MQSERIES_MQPMO_NEW_MSG_ID|MQSERIES_MQPMO_SYNCPOINT);mqseries_put($conn,$obj,$md,$pmo,"test mqseries_put".time(),$copCode,$reason);var_dump($reason);mqseries_close($conn,$obj,MQSERIES_MQCO_NONE,$comp_code,$reason);
mqseries_disc($conn,$comp_code,$reason);die();
命令行模式下调用这个php文件
php mq.php
这是用root用户执行的,默认会报
Connx CompCode:2 Reason:2035 Text:Not authorized for access
用mqm用户,执行下面命令,给通道,管理器,队列都添加上所有权限
setmqaut -m Q2 -n CHAN_SERVER_CON -t channel -p root +all 添加通道权限
setmqaut -m Q2 -t qmgr -p root +all 添加管理器权限
setmqaut -m Q2 -n Quue -t queue -p mqm +all 添加队列权限
就可以了
也可以禁用到用户权限
#修改连接认证策略
ALTER AUTHINFO(SYSTEM.DEFAULT.AUTHINFO.IDPWOS) AUTHTYPE(IDPWOS) CHCKCLNT(OPTIONAL)
#或者关闭连接认证
ALTER QMGR CONNAUTH(" ")
#最后刷新连接认证策略
REFRESH SECURITY TYPE(CONNAUTH)
这里我没测试成功,应该是可以的