此文将展示MQ PHP Linux SDK 整个调用过程,笔者直接使用sdk包中的example消息发送示例代码,开发环境为ubuntu , 64位,PHP 5.5.9。
# uname -a
Linux iZ25bcx8o1fZ 3.13.0-32-generic #57-Ubuntu SMP Tue Jul 15 03:51:08 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
# php -v
PHP 5.5.9-1ubuntu4.13 (cli) (built: Sep 29 2015 15:24:49)
一, 下载PHP SDK lib包
截止笔者文稿完成时,官网提供的lib包只支持Linux 64位机器,且支持的版本有PHP5.4.30, PHP5.5.9, PHP5.6.7, PHP5.6.11。
后续官方将只提供稳定PHP版本对应的lib包。
关于PHP稳定版本,请查询http://php.net/downloads.php
二,引入lib包
请事先阅读文档ALIYUN_ONS_CLIENT_FOR_CPP_AND_NET_USER_GUIDE中关于PHP的章节。
3.jpg
拷贝ONSClient4PHP.so,libonsclient4cpp.so和Producer.php到工作目录。
按照文档说明,当执行到php -d "extension=ONSClient4PHP.so" Producer.php时,会报错:
1.jpg
笔者安装的php默认库路径为/usr/lib/php5/20121212,运行时,php尝试去默认库找ONSClient4PHP.so,所以失败。
这里需要使用绝对路径,或者将ONSClient4PHP.so拷贝到自己的默认库路径下。
三,发送消息
发送前,根据用户自己的数据,修改Producer.php文件:
$prop->setFactoryProperty(ONSFactoryProperty::ProducerId, "PID_xxx");
$prop->setFactoryProperty(ONSFactoryProperty::PublishTopics, "topicxxx");
$prop->setFactoryProperty(ONSFactoryProperty::AccessKey, "xxx");
$prop->setFactoryProperty(ONSFactoryProperty::SecretKey, "xxx");
非聚石塔用户,请将下面这行注释掉:
#$prop->setOnsChannel(ONSFactoryProperty::CLOUD);//默认值为ONSFactoryProperty::ALIYUN
如果上述参数使用不正确,那么将报错:
PHP Notice: Exceptions must be derived from the Exception base class in /root/ONS/ProducerWrong.php on line 20
Topic Route does not exist, Topic:xxx exception:msg: No route info of this topic, ,error:-1,in file <.. defaultmqproducer.cpp=""> line:365
消息发送成功:
2 success.jpg
注意,ProducerId, Topic需要提前在控制台创建,公网环境的Topic可在本地测试使用(也可在ECS上使用,前提是ECS开通了公网,可访问外网),其他地域的Topic需要部署在相应地域ECS上才能正常使用ONS服务。
如果使用的php版本不一致,比如本地安装 php5.5.9, 使用5.4.30的lib包,那么将报错:
PHP Warning: PHP Startup: ONSClient4PHP: Unable to initialize module
Module compiled with module API=20100525
PHP compiled with module API=20121212
These options need to match
in Unknown on line 0
PHP Fatal error: Class ‘ONSFactoryProperty’ not found in /root/ONS/Producer.php on line 4
四,检验消息是否发送成功
建议在消息中设置key属性,方便利用key值在控制台上查询消息。
例如: $msg->setKey("onsphpTest");
如果发现消息发送失败,请提供sdk本地日志($userhome/logs/metaq-client4cpp/),供技术人员排查。
如果问题还未能解决,请联系售后技术支持。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。