php ibm mq,php linux IBM MQ安装以及php对接

c90cadccf06ff6fb04b20ae3486314e8.png

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

80b2d05f362c51efe6785523a39deec3.png

输入信息test,双击回车就结束了

获取队列内容:

ddd6fff3d4315a481943b0268a04b364.png

现在已经可以了

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)

这里我没测试成功,应该是可以的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值