如何使用phpMQTT连接阿里云微服务消息队列for IoT

简介: 关于阿里云的微服务消息队列,目前官方网站在接入示例部分给出了多种语言的SDK参考示例,但是还没有关于php的SDK及接入示例参考。下面主要介绍在使用目前主流的第三方SDK phpMQTT的过程中遇到的问题及解决办法。

概述

关于阿里云的微服务消息队列,目前官方网站在接入示例部分给出了多种语言的SDK参考示例,但是还没有关于php的SDK及接入示例参考。下面主要介绍在使用目前主流的第三方SDK phpMQTT的过程中遇到的问题及解决办法。


主要流程

参数准备

在使用MQTT的过程中,关于参数的配置是一个比较让人头疼的问题,很多用户都在配置参数的过程中遇到过问题,这里建议用户首先使用第三方的工具MQTT.fx完成参数的配置调通工作,后续在代码中直接使用即可,避免在参数配置的过程中犯错。具体可以参考博客:如何使用MQTT.fx连接微服务消息队列

包的引用

用户可以直接参考GitHub官方链接,使用composer的方式加载包,也可以直接下载整个项目使用。

SendDemo

<?php

use Bluerhinos\phpMQTT;

require("phpMQTT.php");

$server = "******.mqtt.aliyuncs.com";     // change if necessary
$port = 1883;                     // change if necessary
$username = "******";                   // set your username
$password = "******";                   // set your password
$client_id = "GID_******@@@devicename"; // make sure this is unique for connecting to sever - you could use uniqid()

$mqtt = new phpMQTT($server, $port, $client_id);

if ($mqtt->connect(true, NULL, $username, $password)) {
    $mqtt->publish("mqtt_topic/notice/", "Hello World PHP! at " . date("r"), 0);
    $mqtt->close();
    echo "send success!";
} else {
    echo "Time out!\n";
}
?>

问题分析及解决

现象

用户使用在上面介绍的工具测试可行的参数直接配置到代码中,会报:Uninitialized string offset 的错误,跟踪到源码,发现:

$string = $this->read(4)

并未读入任何信息,但是参数的配置又没有什么问题,部分用户发现使用同样的代码连接自己的MQTT服务器可以正常连接。

原因

目前phpMQTT仅支持mqttv3.1,但是目前阿里云的微服务消息队列使用的是v3.1.1协议,MQTT v3.1.1协议名称长度 4,而3.1的协议长度为6。

解决方案

源码:

    $buffer .= chr(0x06); $i++;
    $buffer .= chr(0x4d); $i++;
    $buffer .= chr(0x51); $i++;
    $buffer .= chr(0x49); $i++;
    $buffer .= chr(0x73); $i++;
    $buffer .= chr(0x64); $i++;
    $buffer .= chr(0x70); $i++;
    $buffer .= chr(0x03); $i++;

调整为:

    $buffer .= chr(0x04); $i++;
    $buffer .= chr(0x4d); $i++;
    $buffer .= chr(0x51); $i++;
    $buffer .= chr(0x54); $i++;
    $buffer .= chr(0x54); $i++;
    $buffer .= chr(0x04); $i++;

测试效果

1、发送端使用调整后的源码运行SendDemo;

2、接收监听:

_

参考链接

phpMQTT
GitHub Issue

相关实践学习
RocketMQ一站式入门使用
从源码编译、部署broker、部署namesrv,使用java客户端首发消息等一站式入门RocketMQ。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
7月前
|
消息中间件 网络协议 RocketMQ
消息队列和应用工具产品体系-消息队列 Rocket 版的主要功能
消息队列和应用工具产品体系-消息队列 Rocket 版的主要功能
64 0
消息队列和应用工具产品体系-消息队列 Rocket 版的主要功能
|
7月前
|
消息中间件 Java 开发工具
消息队列和应用工具产品体系-消息队列 Rocket 版的基本使用
消息队列和应用工具产品体系-消息队列 Rocket 版的基本使用
97 1
消息队列和应用工具产品体系-消息队列 Rocket 版的基本使用
|
消息中间件 微服务
MQTT X连接阿里云微服务消息队列MQTT
MQTT X 是 EMQ 开源的一款优雅的跨平台 MQTT 5.0 桌面客户端,它支持 macOS, Linux, Windows。MQTT X 的 UI 采用了聊天界面形式,简化了页面操作逻辑,用户可以快速创建连接,允许保存多个客户端,方便用户快速测试 MQTT/MQTTS 连接,及 MQTT 消息的订阅和发布。本文演示如何使用该工具快速连接阿里云微服务消息队列MQTT,并进行消息的发布和订阅测试。
3378 0
MQTT X连接阿里云微服务消息队列MQTT
|
1月前
|
消息中间件 缓存 API
|
7月前
|
消息中间件 存储 负载均衡
消息队列和应用工具产品体系-消息队列的基本概念
消息队列和应用工具产品体系-消息队列的基本概念
90 0
消息队列和应用工具产品体系-消息队列的基本概念
EMQ
|
9月前
|
安全 物联网 Serverless
MQTT 服务新趋势:了解 MQTT 多租户架构
MQTT 的多租户架构为物联网服务提供商提供灵活可扩展的新选择,本文将介绍其优势和挑战。
EMQ
195 0
|
消息中间件 存储 Java
|
消息中间件 物联网 Java
物联网消息队列客户端-MQTT-基本功能实现
物联网消息队列客户端-MQTT-基本功能实现
264 0
|
消息中间件 传感器 网络协议
物联网通信消息队列客户端-MQTT简介
物联网通信消息队列客户端-MQTT简介
445 0
物联网通信消息队列客户端-MQTT简介
EMQ
|
存储 Prometheus 监控
Mria + RLOG 新架构下的 EMQX 5.0 如何实现 1 亿 MQTT 连接
大规模分布式物联网MQTT消息服务器EMQX的5.0 版本在发布前的性能测试中达成了1亿 MQTT 连接。本文将对使EMQX水平扩展能力得到指数级提升的全新底层架构进行详细解析,同时帮助大家理解在不同的实际应用场景中如何选择合适的部署架构,实现更加可靠的设备接入与消息传输。
EMQ
351 0
Mria + RLOG 新架构下的 EMQX 5.0 如何实现 1 亿 MQTT 连接