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

简介: 主要介绍在使用目前主流的第三方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、接收监听:

image.png

参考链接

phpMQTT
GitHub Issue

相关实践学习
快速体验阿里云云消息队列RocketMQ版
本实验将带您快速体验使用云消息队列RocketMQ版Serverless系列实例进行获取接入点、创建Topic、创建订阅组、收发消息、查看消息轨迹和仪表盘。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
6月前
|
物联网
(手把手)在华为云、阿里云搭建自己的物联网MQTT消息服务器,免费IOT平台
本文介绍如何在阿里云搭建自己的物联网MQTT消息服务器,并使用 “MQTT客户端调试工具”模拟MQTT设备,接入平台进行消息收发。
2240 42
|
5月前
|
消息中间件 存储 大数据
阿里云消息队列 Kafka 架构及典型应用场景
阿里云消息队列 Kafka 是一款基于 Apache Kafka 的分布式消息中间件,支持消息发布与订阅模型,满足微服务解耦、大数据处理及实时流数据分析需求。其通过存算分离架构优化成本与性能,提供基础版、标准版和专业版三种 Serverless 版本,分别适用于不同业务场景,最高 SLA 达 99.99%。阿里云 Kafka 还具备弹性扩容、多可用区部署、冷热数据缓存隔离等特性,并支持与 Flink、MaxCompute 等生态工具无缝集成,广泛应用于用户行为分析、数据入库等场景,显著提升数据处理效率与实时性。
|
消息中间件 存储 Serverless
【实践】快速学会使用阿里云消息队列RabbitMQ版
云消息队列 RabbitMQ 版是一款基于高可用分布式存储架构实现的 AMQP 0-9-1协议的消息产品。云消息队列 RabbitMQ 版兼容开源 RabbitMQ 客户端,解决开源各种稳定性痛点(例如消息堆积、脑裂等问题),同时具备高并发、分布式、灵活扩缩容等云消息服务优势。
312 2
|
9月前
|
物联网 数据挖掘 BI
基于阿里云物联网平台(IoT)的智能家居系统开发与部署
随着物联网技术的发展,智能家居成为提升生活品质的重要方向。阿里云物联网平台提供设备接入、数据管理及应用开发能力,支持亿级设备接入、高效数据管理和灵活应用开发,确保系统安全。本文通过实战案例展示如何基于该平台构建智能家居系统,涵盖设备接入、远程控制、场景联动与数据分析等功能,助力企业快速部署智能家居解决方案。
|
8月前
|
存储 NoSQL Linux
微服务2——MongoDB单机部署4——Linux系统中的安装启动和连接
本节主要介绍了在Linux系统中安装、启动和连接MongoDB的详细步骤。首先从官网下载MongoDB压缩包并解压至指定目录,接着创建数据和日志存储目录,并配置`mongod.conf`文件以设定日志路径、数据存储路径及绑定IP等参数。之后通过配置文件启动MongoDB服务,并使用`mongo`命令或Compass工具进行连接测试。此外,还提供了防火墙配置建议以及服务停止的两种方法:快速关闭(直接杀死进程)和标准关闭(通过客户端命令安全关闭)。最后补充了数据损坏时的修复操作,确保数据库的稳定运行。
547 0
|
8月前
|
NoSQL JavaScript Shell
微服务2——MongoDB单机部署2——Shell连接
本节介绍如何通过Shell连接MongoDB数据库,使用`mongo`命令登录,默认连接本地127.0.0.1的27017端口。可查看数据库列表(`show databases`),退出shell(`exit`),或通过`--help`获取更多参数。MongoDB Shell基于JavaScript解释器,支持运行JS程序。
201 0
|
Kubernetes 安全 微服务
使用 Istio 缓解电信 5G IoT 微服务 Pod 架构的安全挑战
使用 Istio 缓解电信 5G IoT 微服务 Pod 架构的安全挑战
233 8
|
安全 数据可视化 数据安全/隐私保护
【Azure 微服务】新创建的Service Fabric集群,如何从本地机器上连接到Service Fabric Explorer(Service Fabric状态/错误查看工具)呢?
【Azure 微服务】新创建的Service Fabric集群,如何从本地机器上连接到Service Fabric Explorer(Service Fabric状态/错误查看工具)呢?
150 3
【Azure 微服务】新创建的Service Fabric集群,如何从本地机器上连接到Service Fabric Explorer(Service Fabric状态/错误查看工具)呢?
|
消息中间件 弹性计算 运维
阿里云云消息队列RabbitMQ实践解决方案评测报告
阿里云云消息队列RabbitMQ实践解决方案评测报告
235 9
|
12月前
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
615 6