概述

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


主要流程

参数准备

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

包的引用

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

SendDemo

<?phpuse 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

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

  1. 阿里云微服务引擎MSE网关功能,开启微服务“大门”云化时代

    简介:微服务网关被作为微服务面向客户端的单一入口,用来处理横向的关注点,包括访问控制.速率限制.负载均衡等等.真正用起来时,我们还需要关注更多的纵向因素,例如服务发现能力.更全面的监控可观测能力.更高 ...

  2. 架构师图谱·微服务消息队列篇

    1. 概述 "架构师图谱"是一个很宏大的命题,特别是优秀的架构师自身也是"由点到面再到图",一点点成长积累起来,尝试写这系列文章的目的更多的是结合自身的一些经验 ...

  3. 阿里云正式推出消息队列Kafka:全面融合开源生态

    摘要: 在全面兼容Apache Kafka生态的基础上,消息队列Kafka彻底解决Apache Kafka稳定性不足的长期痛点,并且支持消息无缝迁移到云上. 近日,阿里云宣布正式推出消息队列Kafka ...

  4. 架构师图谱之微服务消息队列

    更多内容关注微信公众号:fullstack888 概述 "架构师图谱"是一个很宏大的命题,特别是优秀的架构师自身也是"由点到面再到图",一点点成长积累起来,尝试 ...

  5. 阿里云微服务引擎 MSE 2022 年 3 月产品动态

    愚你同乐,4 月优惠享不停,MSE 注册配置中心专业版首购享 8 折优惠,MSE 云原生网关预付费全规格享 7 折优惠. 点击此处,掌握一手产品动态~

  6. ServiceStack.Redis连接阿里云redis服务时使用连接池出现的问题

    创建连接池 1 private static PooledRedisClientManager prcm = CreateManager(new string[] { "password@i ...

  7. 【架构】互联网架构三马车:微服务+消息队列+定时任务

    注:内容整理自:互联网架构:屡试不爽的架构三马车

  8. 今年大促季,阿里云容器服务有哪些技术和应用新突破?

    联合作者:志敏,冬岛,戒空,邓隽,佳旭,谢乘胜,元毅,溪洋 在 2022 年的双 11 大促季中,阿里云容器服务(简称 ACK).容器镜像服务(简称 ACR)除了支撑集团核心系统容器化以及为云上产品提 ...

  9. Esp8266 nodemcu 使用PubSubClient连接阿里云物联网平台

    之前写了一篇微信小程序使用MQTT.js连接阿里云IoT物联网平台,然后很多人问问题的时候顺带会问些硬件的问题,但是自己不会,没法回答.最近有些空闲的时间,自己也挺感兴趣,于是花了一个星期左右的时间看 ...

最新文章

  1. 原来书中说的JVM默认垃圾回收器是错的!
  2. 激光雷达和相机感知融合简介
  3. jwt怎么获取当前登录用户_spring oauth2如何获取当前登录用户信息
  4. Python实现tab文件操作
  5. 向HtmlAgilityPack道歉:解析HTML还是你好用
  6. XGBoost相关知识-2
  7. 临沧计算机教试报名,2019下半年临沧小学计算机教师资格证考什么?
  8. 动作基类 CCAction
  9. IO静态映射和动态映射
  10. xp系统计算机远程桌面连接不上,在XP系统中远程桌面连接不上的解决方式
  11. 图片裁剪,合成(设置透明背景)
  12. 推荐一本书:清华出版的《Modbus软件开发实战指南》
  13. python如何拼读英语单词怎么写_如何快速拼读英语单词?
  14. thread ‘<unnamed>‘ panicked at ‘assertion failed: `(left == right)`
  15. paparazzi 使用3DR数传模块
  16. Node.js 下载与安装教程
  17. 262Echarts - 3D 路径图(Flights on Geo3D)
  18. IDEA Debug出现:Skipped breakpoint at because it happened inside debugger evaluation
  19. Kafka教程(一)基础入门:基本概念、安装部署、运维监控、命令行使用
  20. Mac os下快速从终端进入Finder 从Finder进入终端

热门文章

  1. 进阶 2 日期时间类
  2. php接口模式,PHP设计模式 - 流接口模式
  3. subsring 截取
  4. 写出常用的5个linux命令 并解释,【PHP面试题】写出尽可能多的Linux命令。
  5. oracle服务器文件有哪些,Oracle服务器参数文件维护的技巧有哪些呢?
  6. 基于朴素贝叶斯分类器的西瓜数据集 2.0 预测分类_第十章:利用Python实现朴素贝叶斯模型
  7. 序列化和反序列化_PHP序列化和反序列化
  8. python 整数对应的字符,在Python中将字符串从字母解密为整数映射
  9. capslock键英语怎么读_改造你的CapsLock键,让你效率提升近10倍!
  10. python bp神经网络进行预测_python实现BP神经网络回归预测模型