开发者社区> 问答> 正文

MQ PHP Linux SDK 调试方法及注意事项有哪些?

此文将展示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/),供技术人员排查。



如果问题还未能解决,请联系售后技术支持。

展开
收起
猫饭先生 2017-10-30 09:43:19 3063 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
Alibaba Cloud Linux 3 发布 立即下载
ECS系统指南之Linux系统诊断 立即下载
ECS运维指南 之 Linux系统诊断 立即下载