一. 基础环境
python: 2.7
pymqi: 1.12.0
ibm websphere mq: 7.5
二. 安装过程
我们的目的是在Pycharm中开发python脚本,本地依赖pymqi,访问远程的ibm websphere mq。
在安装pymqi之前,我们必须下载IBM MQ 依赖库,因为pymqi依赖这些依赖库。
2.1 安装IBM MQ工具箱
下载地址: 9.2.0.0-IBM-MQ-Toolkit-MacX64.tar.gz [IBM MQ工具箱 MAC版本]
解压缩
配置环境变量:
1. 9.2.0.0-IBM-MQ-Toolkit-MacX64/bin
2. 9.2.0.0-IBM-MQ-Toolkit-MacX64/samp/bin
最后在命令行中执行dspmqver,若输出以下结果(版本号可能不同),则说明配置成功。
也可以参考网站IBM-MQ,包含了除Python外的其它语言的依赖库,如NodeJs、Java等等。
2.2 安装pymqi
下载地址: pymqi-1.12.0.tar.gz 在download files中就能找到下载链接
下载后,将其解压缩,打开setup.py,将这份文件中所有包含"/opt/mqm/"的路径全部替换成你下载的IBM MQ工具箱的路径。
比如,我下载的IBM MQ工具箱的路径是: /Users/app/9.2.0.0-IBM-MQ-Toolkit-MacX64/,那么就把所有的"/opt/mqm/"全部替换成"/Users/app/9.2.0.0-IBM-MQ-Toolkit-MacX64/"
这样做的原因ibm websphere mq默认被安装在/opt/mgm下,如下图所示:
红色框就是需要的依赖包。
pymqi的setup.py默认我们在本机安装了ibm websphere mq,所以直接写死了安装pymqi过程中需要的依赖所在的路径为"/opt/mqm",这个非常坑,所以一定要替换成我们自己的路径。
现在先回到pycharm中,找到当前项目配置的python的路径,比如"/Users/xxx/python/2.7/bin/python",假设刚才下载的pymqi被存放在"/Users/xxx/Downloads/pymqi-1.12.0"。
我们通过Pycharm打开命令行,执行:
sudo /Users/xxx/python/2.7/bin/python /Users/xxx/Downloads/pymqi-1.12.0/setup.py build
在执行:
sudo /Users/xxx/python/2.7/bin/python /Users/xxx/Downloads/pymqi-1.12.0/setup.py install
最终的执行结果为:
再回到Pycharm,你会发现可以引入pymqi了。
三. 后续问题
1. 引入pymqi后,运行报错: Library not loaded: @rpath/libmqic_r.dylib
解决方案: 在环境变量中添加,以下只需要更改MQ客户端的存储路径,DYLD_LIBRARY_PATH名称不要修改:
export DYLD_LIBRARY_PATH=$HOME/9.2.0.0-IBM-MQ-Toolkit-MacX64/lib64
参考: 点我
2. 连接MQ时报错: pymqi.MQMIError: MQI Error. Comp: 2, Reason 2538: FAILED: MQRC_HOST_NOT_AVAILABLE
解决方案: 我自己是因为MQ所在的redhat服务器防火墙没有关闭。可以通过telnet自己尝试一下。
3. 连接MQ时报错: MQRC_UNKNOWN_CHANNEL_NAME
解决方案: channel名称输入错误,或者不存在这个channel。
4. 连接MQ时报错: mqrc_not_authorized
解决方案: 网上查到是 访问没权限,alter qmgr chlauth(disabled) 把权限验证去掉。 然而这并没有什么用。
我最后是通过设置mcauser('mqm')来解决此问题
Define channel (channel1) chltype (svrconn) trptype (tcp) mcauser(‘mqm’)