微消息队列MQTT版是一款专为移动互联网(MI)和物联网(IoT)领域设计的消息产品,涵盖互动直播,金融支付、智能餐饮、即时聊天、手机App、智能设备、车联网等应用场景;通过对MQTT、WebSocket等协议的全面支持,连接端与云端的双向通信,实现C2C、C2B、B2C等业务场景间的消息通信,可支持千万级设备和消息并发。在阿里云的文档中,PHP推荐的SDK是Mosquitto-PHP,它是一个基于回调和异步操作的PHPMQTT扩展,也依赖于libmosquitto。而simps/mqtt是纯PHP代码实现的协议解析,客户端实现了基于Swoole的同步阻塞客户端和协程客户端,可以在PHP-FPM和CLI两种模式下使用。并且simps/mqtt支持MQTT5.0协议,是第一个支持MQTT5.0协议的PHP类库。如果后面阿里云微消息队列的MQTT版本支持MQTT5.0协议,可以无缝升级。下面是使用simps/mqtt之前提供的Mosquitto-PHP的示例代码gitclonehttps://github.com/simps-cloud/aliyun-mqtt.gitcdaliyun-mqttcomposerinstall示例代码只实现了测试逻辑业务使用还在需要进一步完善。配置文件config.phpreturn['access_key'=>'',//阿里云账号AccessKey'secret_key'=>'',//阿里云账号SecretKey'end_point'=>'',//接入点地址,购买Get'instance_id'=>''实例后从控制台获取,//实例ID,购买后从控制台获取'topic'=>'',//MQTTTopic,一级Topic需要提前申请到MQTTconsole'group_id'=>'',//MQTT客户端ID前缀,GroupID,需要在MQTT控制台申请];使用MQTT消息发送和接收示例sendMessageToMQTT.php包括__DIR__。'/vendor/autoload.php';useSimps\MQTT\Client;useSimps\MQTT\Config\ClientConfig;usefunctionSwoole\Coroutine\run;run(function(){$config=require_once__DIR__.'/config.php';//MQTT客户端ID后缀,DeviceId,business方可自由指定,需保证全局唯一,禁止两个客户端连接使用相同ID$deviceId=Client::genClientID();$qos=0;$port=1883;$keepalive=90;$cleanSession=true;$clientId=$config['group_id'].'@@'.$deviceId;echo"ClientId:{$clientId}",PHP_EOL;//设置认证参数,参考MQTT客户端认证码计算用户名和密码$username='Signature|'.$config['access_key'].'|'.$config['instance_id'];$sigStr=hash_hmac("sha1",$clientId,$config['secret_key'],true);$password=base64_encode($sigStr);echo"用户名:{$username}\r\n密码:{$password}",PHP_EOL;//初始化客户端配置$clientConfig=newClientConfig();$clientConfig->setUserName($username)->setPassword($password)->setClientId($clientId)->setKeepAlive($keepalive)->setMaxAttempts(0)->setSwooleConfig(['open_mqtt_protocol'=>true,'package_max_length'=>2*1024*1024,]);try{//初始化客户端$client=newClient($config['end_point'],$port,$clientConfig);$connect=$client->connect($cleanSession);//连接状态var_dump($connect);$topics[$config['topic']]=$qos;$subStatus=$client->subscribe($topics);//订阅状态??var_dump($subStatus);$publishStatus=$client->publish($config['topic'],"HelloMQTTPHPDemo",$qos);//发布状态var_dump($publishStatus);$buffer=$client->recv();//订阅消息接收var_dump($buffer);回声“完成”;}catch(\Throwable$e){echo$e->getMessage();}});MQTT签名示例connectUseSignatureMode.phpMQTTToken示例connectUseTokenMode.phpMQTT发送订单消息RocketMQ订阅订单消息示例sendOrderMessage.phpP2P消息发送和接收方式sendP2PMessageToMQTT.php
